首先来看一道经典的 C++ 面试题:

  • (1)初始化列表的初始化顺序:不是按照列表的顺序进行的
  • (2)初始化列表的初始化顺序:是按照内存模型中的成员变量的顺序(也即类声明的定义顺序)进行的;
  • (3)也即如何为了避免出现依赖的问题:应当让参数列表和在类内的成员变量声明保持一致;
class A
{
public:A():n2(0), n1(n2+0){}void print() { cout << "n1: " << n1 << ", n2: " << n2 << endl; }
private:int n1;int n2;
};

如果在客户端:

int main(int, char**)
{A a;a.print();return 0;
}

最终输出的结果是:

n1: -858993458, n2: 0// 如前所说,初始化的顺序是由类内定义的顺序决定的// 即先初始化 n1,而 n1 由未被赋值的 n2 初始化

如果为了避免出现初始化依赖的问题,应当使初始化参数列表的顺序和类内定义的顺序保持一致,也即:

class A
{
public:A():n2(0), n1(n2+0){}void print() { cout << "n1: " << n1 << ", n2: " << n2 << endl; }
private:int n2;int n1;
};

C++ 初始化列表

[面试] C++ 语法(一) —— 初始化列表的初始化顺序相关推荐

  1. 28.构造函数中,成员变量一定要通过初始化列表来初始化的?

    首先要明确:如果对象成员是const或者引用的话,必须将其初始化! 构造函数中,成员变量一定要通过初始化列表来初始化的的几种情况! 1)对象成员是const或者引用 #include <iost ...

  2. 为什么不能在子类的初始化列表里初始化父类的成员

    好几次遇到此类问题了:便不得不找些资料弄明白它: 具体代码是: 2 3 4 5 6 7 8 9 10 class A { protected:     int n_; }; class B : pub ...

  3. C++经典问题:如果对象A中有对象成员B,对象B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B?

    对象成员特点总结: (1)实例化对象A时,如果对象A有对象成员B,那么先执行对象B的构造函数,再执行A的构造函数. (2)如果对象A中有对象成员B,那么销毁对象A时,先执行对象A的析构函数,再执行B的 ...

  4. C++类构造函数初始化列表及初始化成员变量的误区

    构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: [cpp] view plaincopy class CExample { pub ...

  5. 子类初始化列表不能初始化父类元素 -- class 'Derived' does not have any field named 'x'

    缘由 偶尔编写如下代码,编译出错, class Base{public:int x; };class Derived : public Base {public:Derived() : x(10) { ...

  6. C++必须使用【初始化列表】初始化数据成员的三种情况

    类对象的构造顺序是这样的: 1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员: 2.进入构造函数后在构造函数中执行一般赋值与计算. 使用初始化列表有两个原因: 原因1.必须这样做: < ...

  7. 构造函数中,成员变量一定要通过初始化列表来初始化的几种情况(转载)

    1.参考博客 博客链接1 博客链接2 2.实例如下 class A { ... private:int a; }; class B : public A { ... private:A &aa ...

  8. C++成员变量初始化列表中初始化顺序

    1.C++使用初始化列表初始化时,成员变量的初始化顺序:只与定义变量的顺序有关. #include <iostream> using namespace std; class A{ pri ...

  9. 初始化列表的初始化顺序

    构造函数初始化列表仅用于初始化成员的值,并不指定这些初始化执行的次序.成员被初始化的次序就是定义成员的次序.第一个被定义的成员先被初始化,依次类推.一般,初始化的顺序无关紧要,然而,如果一个成员是根据 ...

最新文章

  1. 内存按字节编址,地址从A4000H到CBFFFH,共有多少个字节呢?
  2. Lambda表达式练习1【应用】
  3. deletion in request load scenario
  4. hdmi光端机运用于多媒体信息发布系统案例介绍
  5. mysql语句表名大小写敏感_Mysql 表名大小写敏感
  6. 视图之一--创建简单的视图
  7. JS 简易的计算器
  8. 简略讲述我的Fiddler的安转和配置过程
  9. 14-英伟达NVIDIA显卡驱动下载与安装
  10. 将pdf转换成jpg图片
  11. centos 下 docker 的 安装与使用 (一)
  12. Docker中安装并配置redis
  13. 大话信号与系统 --- 奇文共欣赏
  14. 如何计算 NP(natural product likeness)和 BCT(Bertz complexity )?
  15. Python 爬虫 | 获取历史涨停数据
  16. layui框架使用方法详解
  17. 《隐秘的角落》里笛卡尔的爱情故事,是真的吗?
  18. 【MySQL】新版本特性
  19. 生物信息学的发展与未来
  20. 青岛科技大学计算机毕业生去向,青岛科技大学好就业吗?附青岛科技大学就业率最高的专业名单...

热门文章

  1. SQL 基础笔试题 (三)
  2. matlab zxing ean13,【zxing】Ean13 Contents do not pass checksum
  3. spark运行wordcount
  4. Oracle ora01410,一次ORA-01410故障的解决
  5. 雨敲窗python_今夜,有雨敲窗(太美了)
  6. vue的route和router的区别
  7. Markdown 使用指南
  8. 02: DOM 实例
  9. android学习笔记1-布局的初步了解以及 控件的常见属性
  10. VMWare12安装CentOS7操作系统并搭建GitLab环境【1】