使用此代码:
template <class T> class Test {
T _temp;
public:
Test() {
std::cout << "Test()" << std::endl;
};
template <class T2> Test(Test<T2> const &test) {
std::cout << "template <class T2> Test(Test<T2> const &test)" << std::endl;
};
template <class T2> Test(Test<T2> &&test) {
std::cout << "template <class T2> Test(Test<T2> &&test)" << std::endl;
};
};
使用此测试代码:
Test<int> testInt;
Test<float> testFloat(testInt);
Test<float> testFloat2(std::move(testInt));
std::cout << "----------" << std::endl;
Test<int> testInt2;
Test<int> testInt3(testInt2);
Test<int> testInt4(std::move(testInt2));
产生这个输出:
Test()
template <class T2> Test(Test<T2> const &test)
template <class T2> Test(Test<T2> &&test)
----------
Test()
当使用相同类型时,使用默认的复制和移动构造函数代替转换构造函数。
但是如果我在类中添加默认的复制构造函数:
Test(Test const &test) = default;
它产生这个输出:
Test()
template <class T2> Test(Test<T2> const &test)
template <class T2> Test(Test<T2> &&test)
----------
Test()
template <class T2> Test(Test<T2> &&test)
即使使用相同的类型也会调用移动转换构造函数,为什么?
有没有办法统一复制和转换构造函数以避免重复代码?