变量的初始化顺序:

① 基类的静态变量或全局变量

②派生类的静态变量或全局变量

③基类的成员变量

④派生类的成员变量

注意:

①成员变量在使用初始化列表初始化时,与构造函数中初始化成员列表的顺序无关,只与定义成员变量的顺序有关。

②如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。

③类中const成员常量必须在构造函数初始化列表中初始化。

④类中static成员变量,必须在类外初始化。

静态成员是类所有的对象的共享的成员,而不是某个对象的成员。它在对象中不占用存储空间,这个属性为整个类所共有,不属于任何一个具体对象。所以静态成员不能在类的内部初始化。)

看一个例子:

#include <iostream>
using namespace std;class A
{
public:A():n2(0),n1(n2 + 2){}//~A();void print(){cout << "n1:" << n1 << " ,  n2:" << n2 << endl;}private:int n1;int n2;};

我预测结果为:n1:2  ,  n2:0

然而运行结果为:

这是因为第①条提到的,成员变量在使用初始化列表初始化时,与构造函数中初始化成员列表的顺序无关只与定义成员变量的顺序有关。因为成员变量的初始化次序是根据变量在内存中次序有关,而内存中的排列顺序早在编译期就根据变量的定义次序决定了。

又如:

#include <iostream>
using namespace std;class A
{
public:A() {n2=0;n1=n2+2;}void print(){cout << "n1:" << n1 << " ,  n2:" << n2 << endl;}private:int n1;int n2;};

运行结果为:

这个结果说明,如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关

【C/C++】成员变量的初始化顺序相关推荐

  1. C++成员变量的初始化顺序问题

    C++成员变量的初始化顺序问题 由于面试题中,考官出了一道简单的程序输出结果值的题:如下, [cpp] view plain copy  print? class A { private: int n ...

  2. 1.c++中初始化列表和构造函数初始化的区别是什么?2.类的成员变量的初始化顺序是按照声明顺序吗?

    初始化列表和构造函数初始化的区别是什么? 初始化和赋值对内置类型的成员没有太大的区别,在成员初始化列表和构造函数体内进行,在性能和结果上都是一样的.只有一些需要注意的事项 初始化列表一般情况如下: D ...

  3. C++静态类型成员变量的初始化顺序(单例模式)

    对编译器来说,静态成员变量的初始化顺序和析构顺序是一个未定义的行为 #include <string> #include <iostream> using namespace ...

  4. C++中类成员变量在初始化列表中的初始化顺序

    引子:我们知道,C++中类成员变量的初始化顺序与其在类中的声明顺序是有关的. 先看代码: 1 class TestClass1 2 { 3 public: 4 TestClass1() { 5 cou ...

  5. java 成员变量的初始化_Java类变量和成员变量初始化过程

    一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: ...

  6. 构造方法的调用顺序和成员变量的初始化时机以及动态绑定

    构造方法的调用顺序:子类构造器中,JVM会自动的先调用父类的构造方法,然后再执行子类构造方法.在JVM自动调用父类构造方法的时候,会完成父类中拥有的成员变量的值的初始化操作,此时子类的成员变量并未初始 ...

  7. C++类中成员变量的初始化有两种方式

    C++类中成员变量的初始化有两种方式: 构造函数初始化列表和构造函数体内赋值.下面看看两种方式有何不同. 成员变量初始化的顺序是按照在那种定义的顺序. 1.内部数据类型(char,int--指针等) ...

  8. Spring boot变量的初始化顺序

    起因是Spring建议"总是在您的bean中使用构造函数建立依赖注入.总是使用断言强制依赖",而且之前用@Autowired时idea总是给警告,于是全部改成了构造器注入,运行时发 ...

  9. C++类中成员变量的初始化总结

    C++类中成员变量的初始化总结 1. 普通的变量: 一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行.  1 class CA   2 {   3 p ...

最新文章

  1. 烂泥:虚拟化KVM安装与配置
  2. python 打包wheel文件,自己的SDK包
  3. 【内核驱动】 Linux内核源码查看方法(基于Vim)
  4. C++/C 宏定义(define)中# ## 的含义(转)
  5. 数据结构--直接插入排序
  6. cjson源代码解读 (一)介绍
  7. HCIE-Security Day30:IPSec:实验(五)配置基于路由的IPSec PN(采用预共享密钥认证)
  8. Flutter业务开发常用小技巧(样式布局篇)
  9. 电商兴桃,打造乡村振兴新样本
  10. Color---颜色对照表
  11. python用户管理系统
  12. java 大臣的旅费_蓝桥杯2013-java大臣的旅费
  13. ISO26262对软件开发的规定
  14. 2019年20个最佳产品信息管理(PIM)软件(一)
  15. crc16 java包_【Java】CRC16Utils(CRC-16 工具类)
  16. 在javascript中检查相等性的正确方法是什么
  17. Pytorch:全连接神经网络-MLP回归
  18. 计算机全国一级b考试试题,全国版计算机等级考试一级B考前冲刺试题
  19. 安卓 c语言宝典,C语言宝典app下载-C语言宝典下载v1.8.0-西西软件下载
  20. creator中对于shader的应用

热门文章

  1. Javascript屏蔽IE和Firefox浏览器默认按键响应(快捷键功能)
  2. keep dark about sth
  3. [swift] LeetCode 104. Maximum Depth of Binary Tree
  4. L1-055 谁是赢家-PAT团体程序设计天梯赛GPLT
  5. LeetCode 775. Global and Local Inversions
  6. matlab 钻石绘制,用MATLAB代码模拟大雕和钻石人单挑
  7. AIX 与Linux 中crontab 介绍
  8. linux 中用vi编辑器替换字符
  9. angulajs--入门基础
  10. Swift UIColor 添加从十六进制值初始化的扩展