之前在上C++的课的时候,印象中有那么一句话:
如果一个类没有任何构造函数,那么编译器会生成一个默认的构造函数
今天在看《深度探索C++对象模型》的第二章:“构造函数语意学”的时候发现之前听到的说法是错误的。
比如说如下代码:
class A {
public:
int a;
};
int main(void) {
A a;
a.a = 4;
A a2;
a2.a=5;
return 0;
}
按照之前的说法,类A没有任何构造函数,编译器会自动生成一个默认的构造函数,但事实是并不会。把上面的代码反汇编后可以看到结果:
main:
push rbp
mov rbp, rsp #int main(void)
mov DWORD PTR

C++课程中的一个常见误解是,如果类没有定义构造函数,编译器会自动添加默认构造函数。然而,《深度探索C++对象模型》指出,这种说法并不准确。实际上,编译器仅在确实需要默认构造函数时,如初始化包含当前类对象的其他类时,才会生成默认构造函数。通过反汇编示例代码,可以观察到类的对象直接使用而没有调用构造函数,证实了这一观点。
最低0.47元/天 解锁文章
246

被折叠的 条评论
为什么被折叠?



