<分区>
我模糊地记得读过像 int x[4] = {};
这样用于将结构/数组初始化为默认值的代码依赖于非标准(但广泛使用)的扩展首次出现在 gcc 中,正确的版本(显然在标准中说明)是 int x[4] = { 0 };
这是正确的吗?
<分区>
我模糊地记得读过像 int x[4] = {};
这样用于将结构/数组初始化为默认值的代码依赖于非标准(但广泛使用)的扩展首次出现在 gcc 中,正确的版本(显然在标准中说明)是 int x[4] = { 0 };
这是正确的吗?
最佳答案
在 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 };
在这两种情况下,数组的元素都将被零初始化。
关于arrays - 我应该使用 {} 还是 {0} 来初始化数组/结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27461887/