在一个C++案例中调用构造函数的顺序

Nam*_*eOn 5 c++ constructor

#include <iostream>
struct A
{
    A(){std::cout<<"A()"<<std::endl;}
};

template<typename T>
struct B
{
    A a;
    T b;
    B(){std::cout<<"B()"<<std::endl;}
};

int main()
{
    B<B<B<int> > > Test;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

调用构造函数的方法是

A()
A()
A()
B()
B()
B()
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会这样.我以为这将是ABABA B.你能解释一下为什么吗?

Fat*_*KIR 2

b这实际上很简单,如果它像 ABABAB 一样,那么如果您想从 的构造函数访问B,就会遇到麻烦,因为您认为的顺序意味着第一个成员a被实例化,然后ctor运行,然后b被初始化。实际上,每个成员首先被实例化(构造等),然后调用构造函数。