4

我对阅读用于将结构/数组初始化为默认值的代码有一个微弱的记忆,int x[4] = {};它依赖于首先出现在 gcc 中的非标准(但广泛)扩展,并且正确的版本(如标准中所述)是int x[4] = { 0 };

它是否正确?

4

1 回答 1

7

在 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 };

在这两种情况下,数组的元素都将被初始化为零。

于 2014-12-13T18:09:20.367 回答