class UnusualClass
{
int a;
public:
UnusualClass(int a){std::cout<<"Direct initialization"<<std::endl;}
UnusualClass(const UnusualClass &n){std::cout<<"Copy initialization"; }
};
int main ()
{
UnusualClass k1(5); //Direct initialization
UnusualClass k2=56; //Copy initialization
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么编译器会打印两次"直接初始化"?我做了一些研究,发现我可能会得到复制构造函数elision.在这两种情况下,是否有可能获得两种不同的结果?此外,当我使用时,UnusualClass(const UnusualClass &n)=delete我得到一个错误说use of deleted function 'UnusualClass::UnusualClass(const UnusualClass&).如果它跳过这个构造函数,为什么我会得到这个错误?
我知道通过使用两个构造函数我可以得到两个不同的结果UnusualClass(int a);,UnusualClass(double b);但这个技巧似乎不太合适.