c++构造函数中为什么可以调用数据成员

 我来答
uniformdc
2017-07-24 · 知道合伙人数码行家
uniformdc
知道合伙人数码行家
采纳数:41 获赞数:181
荣获北京风飞沙科技有限公司2015年度优秀员工称号

向TA提问 私信TA
展开全部
构造函数可以分为两个阶段执行:(1)初始化阶段;(2)普通的计算阶段(即可以是那些赋值语句之类的。)
不管成员是否在构造函数初始化列表中显示初始化,类类型的成员总是在初始化阶段初始化。
比如这样一个class:
class A {
public: A(int ii);
private: int i; const int ci; int &ri;
};
在执行构造函数A(int ii)时都要先初始化,再能执行构造函数体内的赋值。
那么ci和ri如果不在初始化列表里初始化,是不能执行完初始化操作的。也就是说,初始化const或者引用类型数据成员的唯一机会就是在构造函数初始化列表中。
所以上述构造函数可以写为 A::A(int ii) : ci(ii), ri(ii) {i = ii;}

补充一点:内置类型的成员不进行隐式初始化,所以上述成员i不需要在初始化阶段初始化,当然也可以初始化,只是不管是在初始化列表中初始化还是在函数体内赋值,其效率是一样的。即
A::A(int ii) : ci(ii), ri(ii) {i = ii;} 与A::A(int ii) : i(ii), ci(ii), ri(ii) {} 效率相同。都正确。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式