当前位置: 首页 > news >正文

【c++】构造函数初始化列表中成员初始化的次序性

上代码

复制代码
#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(45);
    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 + 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,如需转载请自行联系原作者

相关文章:

  • 如何做好Code Review:思考、方法和实践
  • 人工智能将如何变革视频监控行业?
  • .net实现客户区延伸至至非客户区
  • Windows年底再现图片漏洞攻击!
  • Flash视频播放器flowplayer的使用
  • 彻底卸载Virtual Camera虚拟摄像头
  • 解决 PHPExcel 长数字串显示为科学计数
  • 【HIHOCODER 1403】后缀数组一·重复旋律(后缀数组)
  • C#中如何将DataTable中的数据写入Excel
  • 打印机的一些高级设置
  • Qt4--FormLayout
  • 通用服务器桩-Receiver使用说明文档
  • linux ftp 实例
  • 啥活都得干好
  • python框架对比
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • HTML中设置input等文本框为不可操作
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • mockjs让前端开发独立于后端
  • Mysql5.6主从复制
  • Node 版本管理
  • Nodejs和JavaWeb协助开发
  • PHP面试之三:MySQL数据库
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 成为一名优秀的Developer的书单
  • 从0到1:PostCSS 插件开发最佳实践
  • 从输入URL到页面加载发生了什么
  • 分类模型——Logistics Regression
  • 高度不固定时垂直居中
  • 规范化安全开发 KOA 手脚架
  • 每天一个设计模式之命令模式
  • 面试总结JavaScript篇
  • 少走弯路,给Java 1~5 年程序员的建议
  • 微信小程序填坑清单
  • 原生js练习题---第五课
  • 《码出高效》学习笔记与书中错误记录
  • 国内开源镜像站点
  • 湖北分布式智能数据采集方法有哪些?
  • #WEB前端(HTML属性)
  • (Forward) Music Player: From UI Proposal to Code
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (ZT)薛涌:谈贫说富
  • (分布式缓存)Redis分片集群
  • (附源码)springboot教学评价 毕业设计 641310
  • (篇九)MySQL常用内置函数
  • (转)c++ std::pair 与 std::make
  • (转)大道至简,职场上做人做事做管理
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • . Flume面试题
  • .equals()到底是什么意思?
  • .form文件_一篇文章学会文件上传
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .Net 垃圾回收机制原理(二)
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明