[英]Why are member classes initialized first in C++?
我已经尝试过了。 码:
#include <iostream>
struct A
{
A() { std::cout << "1"; }
A(const A&) { std::cout << "2"; }
A(A&&) { std::cout << "3"; }
};
struct B
{
B() { std::cout << "4"; }
B(const B& b) : a(b.a) { std::cout << "5"; }
B(B&& b) : a(b.a) { std::cout << "6"; }
A a;
};
int main()
{
B b1;
std::cout << "END OF b1" << std::endl;
B b2 = std::move(b1);
}
输出为:
14END OF b1
26
我只是想知道为什么会这样,为什么B的构造函数被称为第二个? 我也尝试过使用类而不是struct,这是相同的行为。
这是预期的行为。 初始化顺序指定为
1)如果构造函数用于派生最多的类,则将虚拟基类按照它们在基类声明的深度优先从左到右遍历时出现的顺序进行初始化(从左到右是指外观在基本说明符列表中)
2)然后,直接基类按从左到右的顺序初始化,因为它们出现在该类的基符列表中
3)然后,按类定义中的声明顺序初始化非静态数据成员。
4)最后,执行构造函数的主体
然后,在执行B
的构造函数之前,始终将数据成员a
初始化(步骤#3)(步骤#4)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.