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