C++での構築と初期化の順序の保証について疑問があります。たとえば、次のコードには4つのクラス、、、X
およびがありY
ます。main関数は、のオブジェクトを含む、のオブジェクトをインスタンス化し、から派生するため、両方のコンストラクターが呼び出されます。さらに、 'sコンストラクターに渡されたパラメーターは、暗黙的にのオブジェクトに変換されるため、'sコンストラクターも呼び出す必要があります。Z
W
class X
class Y
class Z
const char*
X
class W
W
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