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

oo_*_*uel 4 c++ gcc initialization c++11

我不明白为什么下面的代码编译?

struct A{ A(int); }; struct B{ A a{1}; };
Run Code Online (Sandbox Code Playgroud)

但这不是:

struct A{ A(int); }; struct B{ A a(1); };
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:正如Bo在下面的评论中解释的那样,我错了.现在的问题关系到伤脑筋解析毕竟.

我在gcc-5.1.0上用--std = c ++ 11尝试了这个

Ben*_*igt 10

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

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