有人问到类似的问题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