【问题标题】:Should I use {} or {0} to initialise an array/struct? [duplicate]我应该使用 {} 还是 {0} 来初始化数组/结构? [复制]
【发布时间】:2015-02-12 05:47:12
【问题描述】:

我对阅读 int x[4] = {}; 之类用于将结构/数组初始化为默认值的代码有微弱的记忆,它依赖于首次出现在 gcc 中的非标准(但广泛)扩展,以及正确的版本(显然标准中规定)为int x[4] = { 0 };

这对吗?

【问题讨论】:

    标签: arrays c struct initialization braced-init-list


    【解决方案1】:

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

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

    【讨论】:

    • 作为附加说明,文字零对于所有类型都是有效的初始化常量,并且表示静态对象默认初始化使用的值。所以static T foo = {0}; 会将foo 初始化为与static T foo 相同的值,并且在函数内T bar = {0}; 会将bar 初始化为与foo 已初始化的相同值。
    猜你喜欢
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多