下面的示例来自Stroustrup C++第4版。第519页。我从K&R C和前面的Stroustrup书中了解到,原语类型的本地自动变量是未定义的,或者不知道是初始化的。初始化具有默认构造函数的类的基本类型的静态变量或自动变量。
这意味着int b应该是未定义的,并且不应该被初始化。然而,Stroustrup添加了下面的代码注释,上面写着b = 0。这是Errata吗?或者是使用默认构造函数调用的一些行为?
谢谢
struct S {
string a;
int b;
};
void f(void) {
S s0 {}; // default construction: {"",0}
// ...
}发布于 2020-06-22 00:58:17
在这一行:
S s0 {};所使用的语法是,特别是
当命名变量(自动、静态或线程本地)使用由一对大括号组成的初始化程序声明时,
。
在这种情况下,值初始化的效果是对象s0是.
在这种情况下,效果是:
如果T是一个非并类类型,则所有基类和非静态数据成员都是零初始化的,并且所有填充被初始化为零位。如果有的话,构造函数将被忽略。
这意味着int成员b为零初始化为值0。
发布于 2020-06-22 00:41:39
是否初始化了本地自动变量?
它取决于所使用的初始化语法、变量的类型以及存储类。
表示int b的
应该是未定义的。
否,因为该示例使用值初始化,而所讨论的类是一个聚合类。
https://stackoverflow.com/questions/62505873
复制相似问题