#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.你能解释一下为什么吗?
b这实际上很简单,如果它像 ABABAB 一样,那么如果您想从 的构造函数访问B,就会遇到麻烦,因为您认为的顺序意味着第一个成员a被实例化,然后ctor运行,然后b被初始化。实际上,每个成员首先被实例化(构造等),然后调用构造函数。