C++ 成员初始化和构造函数

标签 c++

无需定义构造函数,我就可以使用成员初始化:

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/

相关文章:

c++ - 为类中的私有(private)静态变量赋值

c++ - Qt 自定义小部件插件 Q_Property With Enum

c++ - 我可以从所需的键迭代 map 吗?

C++ std::for_each() 函数参数类型是什么?

c++ - Eigen 库和 C++ 链接器的问题

c++ - 使用 C++ 从 Linux 环境变量中查找文件的路径名

c++ - 如何在 Qt Creator 中包含 boost header 库

c++ - 从 C++ 中的整数集合中确定第三个四分位数?

一旦满足条件,C++ 就停止执行 while 循环

c++ - 为什么我的字符串在减去字符时会附加空值?