首页 > 解决方案 > C++ 中的空嵌套初始化列表

问题描述

考虑这段代码:

struct S {
    float b;
    int a;    
};

int main() {
    S s{{{}}};
    return s.a;
}

神螺栓

Clang 6.0.0编译此代码,但显示警告:

<source> 警告:标量初始化器周围的大括号太多 [-Wmany-braces-around-scalar-init]

GCC 8.2不编译这段代码并报错:

<source>: In function 'int main()': <source>:9:10: error: 'float' 类型的标量初始值设定项的大括号

哪一个是正确的?规范对此有何评论?

标签: c++initializer-list

解决方案


两个编译器都是正确的。除非您违反了不需要诊断的规则,否则编译器应该向您发出一条消息。该消息是警告还是错误取决于实现。通常,如果编译器仍然可以继续处理,您会收到警告,而当编译器无法继续时,您会收到错误消息。


推荐阅读