首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++:本地自动变量是否初始化?Stroustrup示例

C++:本地自动变量是否初始化?Stroustrup示例
EN

Stack Overflow用户
提问于 2020-06-22 00:30:57
回答 2查看 256关注 0票数 3

下面的示例来自Stroustrup C++第4版。第519页。我从K&R C和前面的Stroustrup书中了解到,原语类型的本地自动变量是未定义的,或者不知道是初始化的。初始化具有默认构造函数的类的基本类型的静态变量或自动变量。

这意味着int b应该是未定义的,并且不应该被初始化。然而,Stroustrup添加了下面的代码注释,上面写着b = 0。这是Errata吗?或者是使用默认构造函数调用的一些行为?

谢谢

代码语言:javascript
运行
复制
struct S { 
   string a;
   int b;
};

void f(void) {
   S s0 {}; // default construction: {"",0}
   // ...
}
EN

回答 2

Stack Overflow用户

发布于 2020-06-22 00:58:17

在这一行:

代码语言:javascript
运行
复制
S s0 {};

所使用的语法是,特别是

当命名变量(自动、静态或线程本地)使用由一对大括号组成的初始化程序声明时,

在这种情况下,值初始化的效果是对象s0是.

在这种情况下,效果是:

如果T是一个非并类类型,则所有基类和非静态数据成员都是零初始化的,并且所有填充被初始化为零位。如果有的话,构造函数将被忽略。

这意味着int成员b为零初始化为值0

票数 4
EN

Stack Overflow用户

发布于 2020-06-22 00:41:39

是否初始化了本地自动变量?

它取决于所使用的初始化语法、变量的类型以及存储类。

表示int b的

应该是未定义的。

否,因为该示例使用值初始化,而所讨论的类是一个聚合类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62505873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档