结构默认构造函数:它是否会使用默认值来初始化我的成员,即'零'

时间:2016-11-21 19:43:33

标签: c++ struct constructor language-lawyer

我正在学习构造函数,我需要澄清一下。我可以在不指定构造函数的情况下构建结构如下:

 struct MyStruct {
 int member;
 }

当我创建此结构的对象时,生成的默认构造函数不会将member初始化为默认值,除非在用户定义的构造函数中明确说明,对吗?这就是:

MyStruct object;
cout<<object.member<<endl;

会根据运行时存储在该内存地址中的内容输出一些随机值,对吗?

我的最后一个问题是,如果我没有显式声明和定义构造函数,那么当我创建一个memberMyStruct未初始化的对象时,生成的构造函数会初始化member吗?

2 个答案:

答案 0 :(得分:5)

是的,编译器生成的构造函数不会初始化内置类型。

编译器生成的构造函数与:

完全相同
MyStruct() {}

访问MyStruct.member会导致未定义的行为。您应该明确初始化member

MyStruct() : member(0) {}

答案 1 :(得分:0)

除非您明确使用“in class initializer” - 如int member = 0; 添加初始化成员的构造函数,否则其值将为 undefined

(必然)是运行时存储在内存地址的任何内容。它是 undefined ;这意味着你不能可靠地使用它,如果,你的编译器可能会利用你正在调用“未定义的行为”的事实,并可能根据这个事实优化你的程序 - 你肯定会做的事情不想要。

使用前始终初始化变量。