c++ - 类模板 : Order of Construction

标签 c++ templates constructor

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;
}

明白为什么obj1调用了第一个构造函数,但是obj2实例化的时候为什么调用了第二个构造函数?

最佳答案

因为T1T2分别是floatint,所以构造函数看起来像

   A (float a, int b ) // first

   A (int a, float b ) // second

构造函数参数分别是intdouble。第二个构造函数提供了比第一个更好的匹配。

关于c++ - 类模板 : Order of Construction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24838129/

相关文章:

c++ - constexpr 默认的默认构造函数

c++ - 对带有可变参数模板的 std::ref() 和 std::bind() 有点模糊

java - 循环使用 get 和 set 吗?

java - 关于继承和构造函数中 Java 8 编译器增强的说明

c++ - 按值传递不调用移动构造函数

c++ - Apple C++ LLVM 编译器 4.x 和 UNICODE : when needed? UNICODE 是默认编译器字符集吗?使您的代码同时编译 ANSI 和 UNICODE 版本

templates - 如何从宏创建参数化类型?

c++ - 为什么函数模板调用类模板的静态方法模板会编译失败?

Java - 在构造函数中初始化 arraylist

c++ - 最小化和恢复窗体上的小部件