我对C++中的构造和初始化顺序保证有些怀疑。例如,下面的代码有四个类X
,Y
,Z
和W
。主函数实例化一个对象class X
,它包含一个对象class Y
,并从class Z
派生,所以这两个构造函数都会被调用。此外,传递给X
的构造函数的const char*
参数将隐式转换为class W
的对象,因此还必须调用W
的构造函数。C++:构造和初始化顺序保证
C++标准对复制构造函数的调用顺序提供了什么保证?或者,等同地,这个程序被允许打印什么?
#include <iostream>
class Z {
public:
Z() { std::cout << "Z" << std::endl; }
};
class Y {
public:
Y() { std::cout << "Y" << std::endl; }
};
class W {
public:
W(const char*) { std::cout << "W" << std::endl; }
};
class X : public Z {
public:
X(const W&) { std::cout << "X" << std::endl; }
private:
Y y;
};
int main(int, char*[]) {
X x("x");
return 0;
}
编辑:这是正确的吗?
W |
/ \ |
Z Y |
\ / |
X V
的顺序将是W舱的, Z,Y,X但我不确定具体规则。 – 2010-03-25 16:00:47
Y和W之间的关系是什么? – curiousguy 2015-08-26 08:21:01