{} vs.()类成员的初始化

时间:2015-10-27 22:34:29

标签: c++ c++11 gcc initialization

我不明白为什么以下代码会编译?

struct A{ A(int); }; struct B{ A a{1}; };

但这不是:

struct A{ A(int); }; struct B{ A a(1); };

错误:预期','或者' ...'在数字常量之前

是否有某些原因编译器不接受第二种形式?我知道最令人烦恼的解析歧视,但我认为这个问题是相关的。

编辑:正如Bo在下面的评论中解释的那样,我错了。 的问题毕竟与烦恼的解析有关。

我在gcc-5.1.0上用--std = c ++ 11

尝试了这个

1 个答案:

答案 0 :(得分:10)

在引入大括号语法之后添加了非静态成员的类内初始化,并且为了避免混淆,例如大多数-vexing-parses,它只能使用大括号语法进行直接初始化(复制初始化)也是允许的。)

语法结构命名为 brace-or-equal-initializer (在C ++ 11和C ++ 14中,如注释中的chris注释,C ++ 1z更改名称)。