【c++】构造函数初始化列表中成员初始化的次序性
2024-08-24 15:24:16
上代码
#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();
}
结果
最新文章
- Doctype作用?严格模式与混杂模式如何区分?它们有何意义?
- angularJs之service
- [转]在windows环境中使用varnish
- HTML5 十大新特性(三)——视频和音频
- matrix-tree
- Objective-C 编码规范
- 软件设计师考试计算机系统知识——CPU
- java_IO流小结
- android TextView EditTextView一些技巧使用 (视图代码布局)
- 让VC2012生成的程序支持XP系统(QT的DLL都是支持XP的,只与EXE有关)
- WCF小实例以及三种宿主
- 基于 Koa.js 平台的 Node.js web 快速开发框架KoaHub.js demo 可安装
- Example of DenseCRF with non-RGB data
- main函数的的两个参数
- python基础之Day24
- 定时备份 MySQL 并上传到七牛
- Windows7无法访问共享文件夹(0x800704cf,0x80070035)解决方法
- smb.conf详解[未完]
- Android MVP开发模式及Retrofit + RxJava封装
- 使用jenkins管理uirecorder录制的任务
热门文章
- Android-事务(Transaction)
- 直接导入用户信息到discuz ucenter.
- [Perl]Windows 系统 Unicode 文件名操作(新建、重命名、枚举、复制)全攻略
- 贝塞尔曲线 WPF MVVM N阶实现 公式详解+源代码下载
- depth深度
- day13学python 协程+事件驱动
- 百度联盟广告 http://cpro.baidustatic.com/cpro/ui/c.js
- bzoj2662冻结
- PHP程序执行流程
- TCP的成块数据流