【发布时间】:2018-03-27 06:05:41
【问题描述】:
我见过一些看起来像这样的旧代码:char foo[100] = { 0 };。结构也会发生类似的情况,例如:STRUCT st = { 0 };。这两种情况的意图都很明确,即对各自的变量进行零初始化。因此,char foo[100] {}; 和 STRUCT st {}; 会更惯用。
我的问题是:是否应该期望带有<variable> = { 0 } 的代码实现相同的结果?我已经使用发布构建二进制文件对此进行了测试,并且元素似乎是零初始化的,但这是否由标准保证?在我看来,<variable> = { 0 } 应该只保证变量的第一个元素(数组元素或结构成员)为零。
另外,类似的声明char foo[100] = {}; 和STRUCT st = {} 表示什么行为?
(这个问题背后的动机是我会将所有声明更改为惯用形式,但如果不能保证零初始化,那么问题会更严重,值得一试。)
【问题讨论】:
-
什么是
STRUCT? -
@juanchopanza:任何类型的 C 结构
-
没有惯用的形式。
= { 0 }是C中唯一允许的初始化形式,C++11允许空括号列表和统一初始化struct s {};注意有水下礁与它的使用,统一初始化可能不会像你所期望的那样接受initializer_list的非平凡类。例如。vector<int> v {3};创建包含一个值为 3 的元素的向量。 -
另外,{ 0 } 的含义与你的理解略有不同。在旧的“C”规则下,这会将第一个成员初始化为给定的值,然后将任何其他成员归零。 IE。 { 1 } 不会将所有成员都设置为 1。
标签: c++ c++11 uniform-initialization