调用了Value构造函数而不是Copy构造函数

时间:2018-08-18 18:05:38

标签: c++

Numeric<int> c1(Numeric<int>(Numeric<int>(2)));

我希望复制构造函数被调用,但事实并非如此,取而代之的是用于值初始化的构造函数。

这是怎么回事?似乎正在进行隐式转换,但是我不明白为什么。

如果我明确地将其转换为

{{1}}

将调用move构造函数,然后调用析构函数。

1 个答案:

答案 0 :(得分:2)

啊哈,您偶然发现了复制消除。有关更多详细信息,请参见https://en.cppreference.com/w/cpp/language/copy_elision。该页面上的第一个示例就是您所描述的确切情况。

您可以通过将main更改为

来调用复制控制器。
Numeric<int> c0(2);
Numeric<int> c1(c0);