Numeric<int> c1(Numeric<int>(Numeric<int>(2)));
我希望复制构造函数被调用,但事实并非如此,取而代之的是用于值初始化的构造函数。
这是怎么回事?似乎正在进行隐式转换,但是我不明白为什么。
如果我明确地将其转换为
{{1}}
将调用move构造函数,然后调用析构函数。
答案 0 :(得分:2)
啊哈,您偶然发现了复制消除。有关更多详细信息,请参见https://en.cppreference.com/w/cpp/language/copy_elision。该页面上的第一个示例就是您所描述的确切情况。
您可以通过将main更改为
来调用复制控制器。Numeric<int> c0(2);
Numeric<int> c1(c0);