时隔16年后,我正在重读斯科特·梅耶斯的《Effective C++》。虽然我还没有读过最新的C++标准,但我注意到,自从第二版Effective C++编写以来,C++已经发生了变化。Scott Meyer在他的书的第三版中提到,即使你有一个空类,这意味着没有什么要初始化或分配的,C++编译器仍然会生成至少3个默认函数,即默认构造函数、默认复制构造函数、赋值运算符,可能还有其他一些函数。根据Meyer先生的说法,以下代码将导致生成上述函数。
class Empty {}
Empty E1; // Default constructor.
Empty E2 ( E1 ); // Default copy constructor.
E1 = E2; // Default assignment operator. 考虑到确实没有什么可初始化的,因为类是空的,那么C++是否仍然为所述函数生成某种代码?
发布于 2018-09-02 23:25:40
可能是一些其他函数。
是的,移动构造函数和移动赋值运算符。就这样。
考虑到确实没有什么可初始化的,因为类是空的,C++是否仍然为所述函数生成某种类型的代码?
有时候。发生的情况是声明了这些特殊的成员,但没有定义。它们只在使用时定义(即odr-used或constant evaluated),否则,不会为它们生成代码,因为它们没有定义。
因为您有一个空类,所以如果定义了特殊成员,它们将不会执行任何操作。
https://stackoverflow.com/questions/52138353
复制相似问题