我不明白为什么以下代码会编译?
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
尝试了这个答案 0 :(得分:10)
在引入大括号语法之后添加了非静态成员的类内初始化,并且为了避免混淆,例如大多数-vexing-parses,它只能使用大括号语法进行直接初始化(复制初始化)也是允许的。)
语法结构命名为 brace-or-equal-initializer (在C ++ 11和C ++ 14中,如注释中的chris注释,C ++ 1z更改名称)。