繁体   English   中英

结构A {int a [2] = {1,2}; }; 合法的C ++ 11?

[英]Is struct A { int a[2] = {1, 2}; }; legal as per C++11?

clang 3.4接受以下代码

struct A
{
    int a[2] = {1, 2};
};

但是,vc ++ 2014 CTP拒绝它并显示错误消息:

error C2536: 'A::A::a': cannot specify explicit initializer for arrays

哪个编译器正确?

是的,这是合法的,但VC ++不支持此功能。 它是类内成员初始化统一 初始化

当然=符号是可选的 ,您的代码与以下代码相同:

struct A
{
    int a[2] {1, 2};
};

是的,它是允许的(但新的)C ++ 11。 具体来说,在C ++ 03中,类成员的语法是(§9.2):


declarator brace-or-equal-initializer opt

这通常允许“大括号或相等的初始化程序”,而不是像C ++ 03中那样限制为常量表达式。

[注意,我在这里省略了一些不相关的语法部分,比如比特字段的规范]。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM