C++ 类模板:构造顺序 模板 甲级 { T1×x; t2y; 公众: A(T1 A,T2 b) { x=a; y=b; cout
因为C++ 类模板:构造顺序 模板 甲级 { T1×x; t2y; 公众: A(T1 A,T2 b) { x=a; y=b; cout,c++,templates,constructor,C++,Templates,Constructor,因为T1和T2分别是float和int,所以构造函数看起来像 template < class T1, class T2 > class A { T1 x; T2 y; public: A(T1 a, T2 b) { x = a; y = b; cout << x << " " << y << endl; } A(T2 b, T1 a
T1
和T2
分别是float
和int
,所以构造函数看起来像
template < class T1, class T2 >
class A
{
T1 x;
T2 y;
public:
A(T1 a, T2 b)
{
x = a;
y = b;
cout << x << " " << y << endl;
}
A(T2 b, T1 a)
{
x = a;
y = b;
cout << x << " " << y << endl;
}
};
int main()
{
A<int, float> obj1(1, 2.5);
A<float, int> obj2(1, 2.5);
return 0;
}
构造函数参数分别为
int
和double
。第二个构造函数比第一个构造函数提供更好的匹配。创建类a的对象obj1时,实例化:
A (float a, int b ) // first
A (int a, float b ) // second
A ( int a, float b ) // first
A ( float a, int b ) //second
传递给obj1
的初始值为(int)
1和(double)
2.5,由于构造函数1似乎更匹配,因此执行它
现在,在创建对象obj2时,实例化:
A (float a, int b ) // first
A (int a, float b ) // second
A ( int a, float b ) // first
A ( float a, int b ) //second
传递到
obj1
的初始值为(int)
1和(双精度)
2.5既然构造函数2似乎更匹配,它就被执行了。你是如何推断T1是float,T2是int的?它们不是相反吗?@DMehta不,它们不是,因为你说过:aobj2
正是我的观点。在第二个构造函数中,第一个参数是T2类型,第二个参数是T1类型。我有什么地方错了吗?@DMehta是的,而且你正在传递int
和double
,所以第二个构造函数更匹配。但这就是我在回答中所说的。非常感谢,但出于某种原因,我无法理解这一点。我可以参考一些文献吗?
A ( float a, int b ) // first
A ( int a, float b ) //second