C++ 调用值构造函数而不是复制构造函数 模板 类数值 { 公众: Numeric():val(T(){cout

C++ 调用值构造函数而不是复制构造函数 模板 类数值 { 公众: Numeric():val(T(){cout,c++,C++,Aha,您偶然发现了复制省略。有关更多详细信息,请参阅。该页上的第一个示例就是您描述的确切情况 只需将main更改为 Numeric<int> c1(Numeric<int>(Numeric<int>(2))); 数字c0(2); 数字c1(c0); 啊哈,您无意中发现了复制省略。有关更多详细信息,请参阅。该页面上的第一个示例就是您描述的确切情况 只需将main更改为 Numeric<int> c1(Numeric<int>(Nume

Aha,您偶然发现了复制省略。有关更多详细信息,请参阅。该页上的第一个示例就是您描述的确切情况

只需将main更改为

Numeric<int> c1(Numeric<int>(Numeric<int>(2)));
数字c0(2);
数字c1(c0);

啊哈,您无意中发现了复制省略。有关更多详细信息,请参阅。该页面上的第一个示例就是您描述的确切情况

只需将main更改为

Numeric<int> c1(Numeric<int>(Numeric<int>(2)));
数字c0(2);
数字c1(c0);

尝试使用
-fno-elide构造函数编译
?请参阅[copy.class]了解复制省略可以发生(或不能发生)的位置,在您的情况下值得注意的是§12.8.31.3“当临时类对象未绑定到引用时(12.2)将被复制/移动到具有相同cv非限定类型的类对象,可以通过将临时对象直接构造到省略的复制/移动的目标中来省略复制/移动操作。”另请参见使用
-fno-elide构造函数尝试编译
?请参见[copy.class]以了解复制省略可以发生(或不能发生)的位置,在您的案例中值得注意的是§12.8.31.3“当未绑定到引用(12.2)的临时类对象将被复制/移动到具有相同类型的类对象时,可以通过将临时对象直接构造到省略的复制/移动目标中来省略复制/移动操作。”另请参见
Numeric<int> c0(2);
Numeric<int> c1(c0);