面试中常问到的C++有关问题
面试中常问到的C++问题C++定义构造函数必须使用初始化列表的场合明其理,而知其然也.先给理论。1. 初始化 !
面试中常问到的C++问题
C++定义构造函数必须使用初始化列表的场合
明其理,而知其然也.先给理论。1. 初始化 != 赋值. a.初始化代表为变量分配内存. 变量在其定义处被编译器初始化(编译时). 在函数中, 函数参数初始化发生在函数调用时(运行时). b.赋值代表"擦除对象当前值, 赋予新值". 它不承担为对象分配内存的义务.2. C++中, 类成员的初始化于初始化列表中完成, 先于构造函数体执行. 即成员真正的初始化发生在初始化列表中, 而不是构造函数体中.再给说明。1. 如果类中有一个成员是一个引用, 由于引用必须给予初始值, 因此, 引用必须使用初始化列表.2. 同理, const属性必须给予初始值, 必须使用初始化列表.3. 继承类中调用基类初始化构造函数, 实际上就是先构造基类对象, 必须使用初始化列表.别的不再说明, 什么时候必须使用初始化列表是很明显的;另外, 简单的说, 任何时候都鼓励使用初始化列表, 一些别的事情(比如在构造函数中分配资源之类的, 请参考RAII, Resource Acquizition Is Initialization)可以放在构造函数体内完成.
?
转自:http://zhidao.baidu.com/question/281970379.html
?
构造、析构顺序:
?
(1)首先调用基类构造函数;
(2)调用成员对象的构造函数;
(3)自己的构造函数。
析构顺序与上面严格相反!
?
const int a = 10; //编译器中怎么实现的
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?