1个回答
展开全部
C++编译器必须为未声明构造函数之class合成一个默认构造函数
第一,class 有member object(该member object有default constructor), class需要default constructor调用member object default constructor
第二,如果一个没有任何constructor的class 派生自一个"带有default constructor"的base class.那么它的default constructor会被合成出来。
第三,如果一个class申明了virtual function,,如果该类没有任何constructor,
编译器也会为它加default constructor.
(如果用户有constructor,编译器会在他的constructor中添加一些code,用来初始化vptr)
第四,一个class(没有申明任何constructor)派生自一个继承串链,其中有一个或多个virtual base classes,编译器也会合成出一个default constructor,在其中放入每一个virtual base class的执行期存取操作的的码,
(如果用户申明了constructors,编译器会在constructor中安插virtual base class执行期存取操作的的码)
上面四种分析合成出的default constructor都是nontrivial default constructors,
不在此情况之内的都trivial default constructors,它们实际上并不会被编译器合成出来
在合成的default constructors,只有base class subobjects和member class object会
被初始化,所有其它的nonstatic data member,如整数、整数指针、整数数组等等都不会被编译器初始化。
第一,class 有member object(该member object有default constructor), class需要default constructor调用member object default constructor
第二,如果一个没有任何constructor的class 派生自一个"带有default constructor"的base class.那么它的default constructor会被合成出来。
第三,如果一个class申明了virtual function,,如果该类没有任何constructor,
编译器也会为它加default constructor.
(如果用户有constructor,编译器会在他的constructor中添加一些code,用来初始化vptr)
第四,一个class(没有申明任何constructor)派生自一个继承串链,其中有一个或多个virtual base classes,编译器也会合成出一个default constructor,在其中放入每一个virtual base class的执行期存取操作的的码,
(如果用户申明了constructors,编译器会在constructor中安插virtual base class执行期存取操作的的码)
上面四种分析合成出的default constructor都是nontrivial default constructors,
不在此情况之内的都trivial default constructors,它们实际上并不会被编译器合成出来
在合成的default constructors,只有base class subobjects和member class object会
被初始化,所有其它的nonstatic data member,如整数、整数指针、整数数组等等都不会被编译器初始化。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询