C数组和结构中的C ++统一初始化

萨曼莎(Samantha)

我看过一些看起来像这样的旧代码:char foo[100] = { 0 };结构也会发生类似的情况,例如:STRUCT st = { 0 };在两种情况下,其意图都是明确的,即将各个变量初始化为零。因此,char foo[100] {};STRUCT st {};会更地道。

我的问题是:<variable> = { 0 }预期代码会达到相同的结果吗?我已经使用release-build二进制文件对此进行了测试,并且元素似乎是零初始化的,但是标准可以保证吗?在我看来,<variable> = { 0 }应该仅保证变量的第一个元素(数组元素或struct成员)为零。

另外,类似的声明char foo[100] = {};表明了什么行为STRUCT st = {}

(此问题的动机是我将所有声明都更改为惯用格式,但是如果不能保证零初始化,那么这个问题就更严重了,值得一试。)

萨胡

在我看来,<variable> = { 0 }应该仅保证变量的第一个元素(数组元素或struct成员)为零。

对于POD类型,该语法与 <variable> = {};

任何未明确指定的内容都将初始化为零。<variable> = { somve_value }仅当some_value非零使用有所作为。

即使相同的语法可以用于非POD类型,也可以使用其默认构造函数来初始化未明确初始化的非POD类型的元素。

8.5.1汇总/ 7开始

如果列表中的初始化程序子句少于聚合中的成员,则每个未显式初始化的成员都应从一个空的初始化程序列表([dcl.init.list])中初始化[示例:

struct S { int a; const char* b; int c; };
S ss = { 1, "asdf" };

初始化ss.a1ss.b"asdf",和ss.c与所述形式的表达的值int(),即,0结束示例]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章