无需定义构造函数,我就可以使用成员初始化:
struct B {
A a_;
};
稍后再说
B b {A()};
这是有效的,因为不涉及 A 的复制或移动。然而,一旦我为 B 定义了移动构造函数,上面的代码就不再编译。如何让成员初始化和一些构造函数共存?
最佳答案
按照其定义方式,如果 A
是聚合类型,则 B
是聚合类型。
B b {A()};
是聚合初始化。
当您向 B
添加移动构造函数时,B
不再是聚合类型。因此,您不能使用聚合初始化来初始化 B
的实例。
来自标准(强调我的):
8.5.1 Aggregates [dcl.init.aggr]
1 An aggregate is an array or a class (Clause 9) with no user-provided constructors (12.1), no brace-or-equalinitializers for non-static data members (9.2), no private or protected non-static data members (Clause 11), no base classes (Clause 10), and no virtual functions (10.3)
关于C++ 成员初始化和构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26920134/