构造函数初始化顺序和引用传递

Coo*_*kie 3 c++ constructor

嗨,我有一个关于构造函数初始化顺序的问题.如下所示

struct B {}
struct A
{
    B& b;
    A(B& b) : b(b) {}
}
struct C
{
    B b;
    A a;
    C() : b(),a(b) {}
}
struct D
{
    A a;
    B b;
    D() : a(b),b() {}
}
Run Code Online (Sandbox Code Playgroud)

我知道C是有效的,因为b在a之前被初始化.但D怎么样?b还没有建成,但地址应该已经知道了,所以它应该是安全的吗?

谢谢

Pup*_*ppy 6

它们都是有效的,因为A根本不会调用B.如果A访问了B的数据成员或成员函数,那么这将是无效的.在A的现有情况下,不可能产生无效的例子.