我有一个微弱的阅读记忆,用于将结构/数组初始化为默认值的int x[4] = {};
代码依赖于首次出现在gcc中的非标准(但广泛)扩展,以及正确的版本(正如标准中明确指出的那样)int x[4] = { 0 };
这是对的吗?
答案 0 :(得分:6)
在C中,初始化列表的定义方式如下
initializer:
assignment-expression
{ initializer-list }
{ initializer-list , }
在C ++中,它的定义方式如下
braced-init-list:
{ initializer-list ,opt }
{ }
正如您所看到的,C ++允许空的大括号初始化列表,而在C初始化列表中可能不会被省略。
所以你可以用C ++写作
int x[4] = {};
然而,在C中,这个定义不满足标准(尽管它可以是实现定义的语言扩展)。所以你必须写
int x[4] = { 0 };
在这两种情况下,数组的元素将被零初始化。