在中断 16 年后,我正在重读 Scott Meyers 的 Effective C++。虽然我没有读过最新的 C++ 标准,但我注意到自 Effective C++ 第二版编写以来 C++ 发生了变化。 在他的书的第三版中,Scott Meyers 提到即使你有一个空类,这意味着没有任何东西可以初始化或分配,C++ 编译器仍然会生成至少 3 个默认函数,即默认构造函数、默认复制构造函数、赋值运算符,可能还有其他一些函数。根据迈耶斯先生的说法,以下代码将导致上述功能的生成。
class Empty {}
Empty E1; // Default constructor.
Empty E2 ( E1 ); // Default copy constructor.
E1 = E2; // Default assignment operator.
考虑到确实没有什么可初始化的,因为类是空的,C++ 是否仍会为声明的函数生成某种代码?
最佳答案
probably some other functions.
是的,移动构造函数和移动赋值运算符。就是这样。
Considering that there really is nothing to initialize, as the class is empty, does the C++ still generate some sort of code for the stated functions?
有时。发生的情况是那些特殊成员已声明,但未定义。它们仅在使用时被定义(即 odr-used 或 constant evaluated ),否则不会为它们生成代码,因为它们未定义。
因为你有一个空类,如果定义了特殊成员,它们将什么都不做。
关于c++ - 即使类不包含数据,C++ 14 是否仍会生成默认函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52138353/