有人問到類似的問題here,但沒有得到正確的答案。相互參考實例
以下是合法嗎?
struct B;
struct A
{
A(B& b) : b(b)
{
}
B& b;
};
struct B
{
B(A& a) : a(a)
{
}
A& a;
};
struct C
{
C() : a(b), b(a)
{
}
A a;
B b;
};
不知其落入3.8(6)(C++ 2003)
...一個對象的生命週期開始之前,但存儲 該對象將佔據後就一直分配,或者在對象的生命週期 已經結束並且在對象 佔用的存儲被重新使用或釋放之前,可以使用任何指向原始對象的左值,但僅限於有限的方式。這樣的左值 涉及分配的存儲(3.7.3.2),並且使用不依賴於它的值的左值的屬性是明確的。
不知道這是有關你的問題,但在我看來就像該初始化列表'C'永遠不會正常工作。初始化順序取決於聲明的順序。 –
我認爲只要A和B構造函數只記住引用而不訪問引用的對象,它們就會成功。我想這算「使用不依賴於它的價值的屬性」。 – Medinoc
對我來說似乎也是合法的。 – Massa