我對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