是否可以使用默认的复制构造函数和模板化的转换构造函数?

NOh*_*Ohs 3 c++ templates constructor

如果我有这样的课程

template <typename T>
class MyClass
{
    T myData;

public:
    T getValue() { return myData; }        

    template <typename V>
    MyClass(const MyClass<V>& other) :
        myData((T) other.getValue())
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

这意味着我提供了一个拷贝构造函数(对于V = T),因此根据这个链接为什么没有默认的move-assignment/move-constructor?我没有获得默认移动构造函数等.

有没有办法让模板化的构造函数只作为转换构造函数使用,所以对于V!= T?

Rei*_*ica 5

你的前提是错的.从不使用构造函数模板来实例化复制(或移动)构造函数.换句话说,复制/移动构造函数始终是非模板成员函数,即使成员函数模板可以生成具有适当复制/移动签名的构造函数.

因此,除了模板之外,您的类仍将具有普通的复制构造函数.

  • @Bathsheba我强烈怀疑.删除的函数存在,因此仍然会被选中.只是它的使用是不正确的. (3认同)