{}与类成员的()初始化
{} vs. () initialization of a class member
我不明白为什么要编译以下代码?
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
引入大括号语法后,添加了非静态成员的类内初始化,为了避免混淆(如大多数令人烦恼的解析),它只能使用大括号语法进行直接初始化(也允许复制初始化)。
语法结构名为大括号或相等初始值设定项(在C++11和C++14中,正如chris在评论中所指出的,C++1z会更改名称)。
相关文章:
- 为什么在C++中首先初始化成员类
- 是否可以防止省略聚合初始化成员?
- 正在复制具有未初始化成员的结构
- 使用大括号或括号初始化成员变量
- C++结构:强制初始化成员?
- C++中未初始化成员布尔变量的默认值是多少?
- 使用默认值初始化成员引用
- 在构造函数中初始化成员时,是否应该在成员上使用 std::move?
- C++使用 { } 初始化成员变量
- 如何根据构造函数参数使用超类类型初始化成员变量?
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 有没有办法在Brace中初始化成员
- 从现有 istream 或类本身创建的 istream 初始化成员 istream
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- 通常应用方法,使用带有构造函数委托的 SFINAE 通过类模板的构造函数初始化成员
- 如何在嵌套类中初始化成员?C
- 是否可以在构造函数主体中初始化成员变量,而不是初始值设定项列表
- 编译器错误,因为构造函数必须显式初始化成员
- 如何使用成员函数初始化成员函数指针
- C 如何使用隐藏的默认构造函数初始化成员