上代码

#include <iostream>
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();
b.print_val();
}

结果

究其因

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

解决途径

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

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

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

结果

最新文章

  1. Doctype作用?严格模式与混杂模式如何区分?它们有何意义?
  2. angularJs之service
  3. [转]在windows环境中使用varnish
  4. HTML5 十大新特性(三)——视频和音频
  5. matrix-tree
  6. Objective-C 编码规范
  7. 软件设计师考试计算机系统知识——CPU
  8. java_IO流小结
  9. android TextView EditTextView一些技巧使用 (视图代码布局)
  10. 让VC2012生成的程序支持XP系统(QT的DLL都是支持XP的,只与EXE有关)
  11. WCF小实例以及三种宿主
  12. 基于 Koa.js 平台的 Node.js web 快速开发框架KoaHub.js demo 可安装
  13. Example of DenseCRF with non-RGB data
  14. main函数的的两个参数
  15. python基础之Day24
  16. 定时备份 MySQL 并上传到七牛
  17. Windows7无法访问共享文件夹(0x800704cf,0x80070035)解决方法
  18. smb.conf详解[未完]
  19. Android MVP开发模式及Retrofit + RxJava封装
  20. 使用jenkins管理uirecorder录制的任务

热门文章

  1. Android-事务(Transaction)
  2. 直接导入用户信息到discuz ucenter.
  3. [Perl]Windows 系统 Unicode 文件名操作(新建、重命名、枚举、复制)全攻略
  4. 贝塞尔曲线 WPF MVVM N阶实现 公式详解+源代码下载
  5. depth深度
  6. day13学python 协程+事件驱动
  7. 百度联盟广告 http://cpro.baidustatic.com/cpro/ui/c.js
  8. bzoj2662冻结
  9. PHP程序执行流程
  10. TCP的成块数据流