我正在学习构造函数,我需要澄清一下。我可以在不指定构造函数的情况下构建结构如下:
struct MyStruct {
int member;
}
当我创建此结构的对象时,生成的默认构造函数不会将member
初始化为默认值,除非在用户定义的构造函数中明确说明,对吗?这就是:
MyStruct object;
cout<<object.member<<endl;
会根据运行时存储在该内存地址中的内容输出一些随机值,对吗?
我的最后一个问题是,如果我没有显式声明和定义构造函数,那么当我创建一个member
或MyStruct
未初始化的对象时,生成的构造函数会初始化member
吗?
答案 0 :(得分:5)
是的,编译器生成的构造函数不会初始化内置类型。
编译器生成的构造函数与:
完全相同MyStruct() {}
访问MyStruct.member
会导致未定义的行为。您应该明确初始化member
:
MyStruct() : member(0) {}
答案 1 :(得分:0)
除非您明确使用“in class initializer” - 如int member = 0;
或添加初始化成员的构造函数,否则其值将为 undefined 。
不(必然)是运行时存储在内存地址的任何内容。它是 undefined ;这意味着你不能可靠地使用它,如果,你的编译器可能会利用你正在调用“未定义的行为”的事实,并可能根据这个事实优化你的程序 - 你肯定会做的事情不想要。
使用前始终初始化变量。