严格意义上的子对象初始化只能在复合类的构造函数的初始化列表中进行。 作为变通,你可以在子对象所属的类中把真正执行初始化工作的代码写成一个普通公开成员函数,在复合类的构造函数体内调用这个函数。 class A{ int data; public: A(){} A(int d):data(d){} void init(int d){data=d;} }; class B{ A a; public: B(int d):a(d)//常规方法,在初始化列表中初始化子对象 { } }; class C{ A a; public: C(int d)//变通方法,在函数体中初始化子对象 { a.init(d); } };