【发布时间】:2016-12-20 11:27:00
【问题描述】:
我正在阅读来自网站C++ 编程语言 的C++ Super-FAQ 中构造函数初始化的顺序。那里提供了以下代码。
#include <iostream>
class Y {
public:
Y();
void f();
};
Y::Y() { std::cout << "Initializing Y\n"; }
void Y::f() { std::cout << "Using Y\n"; }
class X {
public:
X(Y& y);
};
X::X(Y& y) { y.f(); }
class Z {
public:
Z();
protected:
X x_;
Y y_;
};
Z::Z()
: y_()
, x_(y_)
{ }
int main()
{
Z z;
return 0;
}
此代码的打印顺序是:
使用 Y
初始化 Y
好吧,我只是无法意识到这种打印顺序是如何可能的,因为在 Z 类的构造函数中,Y 类的实例 y_ 首先被实例化为实例 x_ X级的就是这样。换句话说,如果首先使用方法 Y::f() 我需要实例化一个肯定会调用它的 Y构造函数和打印例程 std::cout .
【问题讨论】:
标签: c++ constructor initialization