博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++成员初始化顺序
阅读量:5836 次
发布时间:2019-06-18

本文共 870 字,大约阅读时间需要 2 分钟。

#include 
using namespace std;int seti() {cout << "seti" << endl;return 1;}int setj() {cout << "setj" << endl;return 1;}class a{public: a() {cout << "a()~~~~~" << endl;}};class b{public: b():j(setj()),i(seti()) {cout << "b()~~~~~" << endl;} int i; a ca; int j;};int main(){ b ob; return 0;}

  运行结果:

可以看出成员被初始化的顺序和成员初始化表里面的顺序是没有关系的,只和成员的声明顺序有关。

总结一下:要判断b类的对象ob的成员初始化顺序,

1.先找出构造函数头后的显示成员初始化表,这里是 j(setj()),i(seti()) ,

2.接下来再找出隐式成员初始化列表,只有ob.a是一个类的对象,所以最后的成员初始化表就是 j(setj()),i(seti()),oa(a()) 

3.这三个成员的初始化顺序是 i、ca、j,所以初始化顺序是 i先被初始化,然后是ca被初始化,最后是j被初始化,再然后是构造函数体内的语句被执行。

构造函数的成员初始化表(显示+隐式)和构造函数体内的区别是:先执行成员初始化表然后再执行构造函数体内的语句。

对于const类型和引用类型的成员只能在成员初始化表初始化,以及在类定义中初始化(static const类型还可以在类定以外的程序文本中初始化);

对于基本类型的成员在成员初始化表中初始化和函数体内赋值的效果是一样的,若显示初始化表里面没有基本类型的成员,那么不会把他放入隐式初始化表里面;

对于类类型的成员,如果没有出现在显示初始化表里面,则会放入隐式初始化表里面。

转载于:https://www.cnblogs.com/xxNote/p/4200491.html

你可能感兴趣的文章
被需求搞的一塌糊涂,怎么办?
查看>>
c_数据结构_队的实现
查看>>
jquery 选择器总结
查看>>
Qt设置背景图片
查看>>
【阿里云文档】常用文档整理
查看>>
java中的Volatile关键字
查看>>
前端自定义图标
查看>>
实验二
查看>>
独立开发一个云(PaaS)的核心要素, Go, Go, Go!!!
查看>>
MyBatis使用DEMO及cache的使用心得
查看>>
网站文章如何能自动判定是抄袭?一种算法和实践架构剖析
查看>>
【OpenCV学习】滚动条
查看>>
ofo用科技引领行业进入4.0时代 用户粘性连续8个月远甩摩拜
查看>>
兰州青年志愿者“中西合璧”玩快闪 温暖旅客回家路
查看>>
计划10年建10万廉价屋 新西兰政府:比想象中难
查看>>
甘肃发首版《3D打印职业教育教材》:校企合作育专才
查看>>
李娜入选国际网球名人堂 成亚洲第一人
查看>>
为找好心人抚养孩子 浙江一离婚父亲将幼童丢弃公园
查看>>
晚婚晚育 近20年巴西35岁以上孕妇增加65%
查看>>
读书:为了那个美妙的咔哒声
查看>>