假设我们有以下内容:
struct C;
struct B {
C& c;
B(C& c) : c{c} {}
};
struct A;
struct C {
A& a;
C(A& a) : a{a} {}
};
struct A {
B b;
C c;
A() : b(c), c(*this) {}
};
用c
初始化成员变量this
似乎是合法的,因为初始化器列表中有this
can be used to refer to the object being initialized。但是,当将c
传递给b
的构造函数时,c
的生命周期尚未开始,并且自it does have a reference member起,旧指针无法用于操作新的{{1 }}对象。
我相信上面的代码表现良好/直观上合理,因为C
在对象b
完全构建之前从未使用过c
的引用。
该语言的哪一部分说明可以正常工作?
编辑:澄清一下,c
对象的构造完成后,通过c
访问b
合法的原因是什么?即所有的生命开始之后。