我有一个微弱的阅读记忆,int x[4] = {};用于将结构/数组初始化为默认值的代码依赖于最初出现在gcc中的非标准(但广泛)扩展,并且正确的版本(如标准中明确指出的)是int x[4] = { 0 };
它是否正确?
在C中,初始化列表按以下方式定义
initializer:
assignment-expression
{ initializer-list }
{ initializer-list , }
Run Code Online (Sandbox Code Playgroud)
在C++中,它的定义方式如下
braced-init-list:
{ initializer-list ,opt }
{ }
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,C++允许空的大括号初始化列表,而在C初始化列表中可能不会省略.
所以你可以用C++编写
int x[4] = {};
Run Code Online (Sandbox Code Playgroud)
但是在C中,这个定义不满足标准(尽管它可以是实现定义的语言扩展).所以你必须写
int x[4] = { 0 };
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,数组的元素将被零初始化.
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |