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更改名称).