[英]Behaviors of default initialization on struct fields
这样编写代码时:
#include <iostream>
using namespace std;
struct ID {
char *name;
int age;
};
int main() {
ID a;
cout << (long)(a.name) << endl;
cout << a.age << endl;
// cout << (a.name == nullptr) << endl;
return 0;
}
结果是:
0
0
但是,当这样写时:
#include <iostream>
using namespace std;
struct ID {
char *name;
int age;
};
int main() {
ID a;
cout << (long)(a.name) << endl;
cout << a.age << endl;
cout << (a.name == nullptr) << endl;
return 0;
}
结果似乎很奇怪:
140735032148552
1545300144
0
这两个版本的差异如何?
由于行为不确定 。 定义局部变量不会初始化它,结构的内容将是不确定的,并且使用它会导致所述UB。
我自己找到了答案。 谢谢! 皮尔博格,丹尼尔和帕斯坦尼斯。 您的回答和评论对我有很大帮助。
我的困惑来自“ C ++ Primer”中的一段。 万一其他人有同样的困惑,我在这里写下我的理解。
原始字词:
在新标准下,我们可以为数据成员提供类内初始化程序。 创建对象时,将使用类内的初始化程序来初始化数据成员。 没有初始化程序的成员将被默认初始化(第2.2.1节,第43页)。 因此,当我们定义Sales_data对象时,units_sold和Revenue将被初始化为0,而bookNo将被初始化为空字符串。
-“ C ++ Primer 5th Edition”
我以为结构中的字段遵循与全局变量相同的默认初始化规则(即,初始化为它们的零值)。 但实际上,它遵循与局部变量相同的规则,即:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.