即使该类不包含数据,C++ 14是否仍会生成默认函数?

Irf*_*fan 6 c++ c++14

经过16年的中断,我正在重读Scott Meyers的Effective C++.虽然我还没有阅读最新的C++标准,但是我注意到自从第二版Effective C++编写以来C++发生了变化.在他的书的第三版中,Scott Meyers提到即使你有一个空类,意味着没有什么可以初始化或分配,C++编译器仍然会生成至少3个默认函数,即默认构造函数,默认复制构造函数,赋值运算符,可能还有其他一些函数.根据Meyers先生的说法,以下代码将导致产生上述功能.

class Empty {}
Empty E1; // Default constructor.
Empty E2 ( E1 ); // Default copy constructor. 
E1 = E2; // Default assignment operator. 
Run Code Online (Sandbox Code Playgroud)

考虑到没有什么可以初始化,因为类是空的,C++是否仍然为所述函数生成某种代码?

Rak*_*111 7

可能是其他一些功能.

是的,移动构造函数和移动赋值运算符.而已.

考虑到没有什么可以初始化,因为类是空的,C++是否仍然为所述函数生成某种代码?

有时.会发生什么是声明了那些特殊成员,但没有定义.它们仅在使用时定义(即使用odr常量评估),否则,没有为它们生成代码,因为它们未定义.

而且因为你有一个空类,如果定义了特殊成员,它们将什么都不做.

  • @Irfan你走了; 那些是标准的链接.如果您想要更好的解释:[odr-used](/sf/ask/1374139931/).无法找到一个用于常量计算,但基本上是在编译时上下文中使用(粗略地). (2认同)