博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【c++】构造函数初始化列表中成员初始化的次序性
阅读量:6424 次
发布时间:2019-06-23

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

上代码

#include 
using namespace std;class A{ public: A(int v): j(v + 2), i(j) {} void print_val() { cout << "hello:" << i << " " << j << endl;} private: int i; int j;};int main(int argc ,char **argv){ A b(45); b.print_val();}

结果

究其因

类中成员变量的声明次序为先i后j,在初始化列表中初始化时,先j后i。但是程序执行时,初始化列表中初始化的顺序与声明的顺序一致(先i后j),而和自己的声明顺序无关。这样到时i用没有初始化的j初始化,导致错误!

 

解决途径

1. 严格按照成员变量声明的顺序初始化

2. 尽量用参数初始化,而不是成员变量之间的相互作用

#include 
using namespace std;class A{ public: A(int v): i(v), j(v + 2) {} void print_val() { cout << "hello:" << i << " " << j << endl;} private: int i; int j;};int main(int argc ,char **argv){ A b(45); b.print_val();}

结果

本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3477586.html,如需转载请自行联系原作者

你可能感兴趣的文章
Eclipse & IDEA 中常用的快捷键
查看>>
javascript ---IPhone滑动解锁
查看>>
table固定行和表头
查看>>
<每天读一点职场心理学>读书笔记
查看>>
Android权限大全代码
查看>>
android 判断SIM卡是哪个运营商
查看>>
删除N天前的M(天)个目录 、删除N天前最后修改的文件 ForFiles, dos command 批处理命令cmd/bat...
查看>>
十进制数1~n中1出现的次数
查看>>
PostgreSQL 的 语法分析的理解(五)
查看>>
[转载]Visual Studio 2010敏捷利剑:详解Scrum
查看>>
Java Collection: List、Set、 Map、 HashMap、 Hashtable、 Vector
查看>>
T-SQL查询进阶--流程控制语句
查看>>
Excel VBA小试
查看>>
备份Toad中保存的数据库连接用户名和密码
查看>>
ASP.NET中 Repeater 的使用前台绑定
查看>>
微信公众平台模拟群发技术
查看>>
C语言学习之指针详解
查看>>
学习使用Bing Maps Silverlight Control(一):准备和新建
查看>>
讲一讲什么叫阻塞非阻塞同步异步
查看>>
选择器补遗
查看>>