[C++基础] 成员变量的初始化顺序
转载链接:https://blog.csdn.net/qq_37059483/article/details/78608375
1、成员变量在使用初始化列表初始化时,只与定义成员变量的顺序有关,与构造函数中初始化成员列表的顺序无关。因为成员变量的初始化次序是根据变量在内存中次序有关,而内存中的排列顺序早在编译期就根据变量的定义次序决定了。这点在EffectiveC++中有详细介绍。
2、如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。
3、注意:类成员在定义时,是不能初始化的
4、注意:类中const成员常量必须在构造函数初始化列表中初始化。
5、注意:类中static成员变量,必须在类外初始化。
6、静态变量进行初始化顺序是基类的静态变量先初始化,然后是它的派生类。直到所有的静态变量都被初始化。这里需要注意全局变量和静态变量的初始化是不分次序的。这也不难理解,其实静态变量和全局变量都被放在公共内存区。可以把静态变量理解为带有“作用域”的全局变量。在一切初始化工作结束后,main函数会被调用,如果某个类的构造函数被执行,那么首先基类的成员变量会被初始化。
例子:
class A
{
private:
int n1;
int n2; public:
A():n2(),n1(n2+){} void Print(){
cout << "n1:" << n1 << ", n2: " << n2 <<endl;
}
}; int main()
{ A a;
a.Print(); return ;
}
输出:
n1: 是一个随机数;n2: 0
------------------------
变量的初始化顺序:
1 基类的静态变量或全局变量
2 派生类的静态变量或全局变量
3 基类的成员变量
4 派生类的成员变量
[C++基础] 成员变量的初始化顺序的更多相关文章
- C++成员变量的初始化顺序问题
问题来源: 由于面试题中,考官出了一道简单的程序输出结果值的题:如下, class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} ...
- java 静态代码块 代码块 构造函数 静态成员变量 成员变量的初始化顺序
没有父类的情况 1,静态代码块-->静态成员变量-->成员变量(实例属性)-->代码块-->构造函数 2, 静态代码块 和 静态成员变量 只会初始化一次 有父类的情况 1,父类 ...
- C++中类成员变量在初始化列表中的初始化顺序
引子:我们知道,C++中类成员变量的初始化顺序与其在类中的声明顺序是有关的. 先看代码: class TestClass1 { public: TestClass1() { cout << ...
- Java基础-成员变量与局部变量
Java基础-成员变量与局部变量 1.什么是成员变量与局部变量? public class Student { String name; int high; public void stu ...
- MFC中成员变量的声明顺序与析构顺序
第一次用博客,第一篇随笔,就写今天遇到的一个问题吧. 在VS2008的MFC对话框程序,窗口成员变量的声明顺序与其析构顺序相反,即,先声明的变量后析构,后声明的变量先析构.未在其他模式下测试. cla ...
- 为什么java局部变量没有初始化就会报错,而成员变量没有初始化就不会报错?
代码如下 1.局部变量,报错!!! public void test(){ int i; System.out.println(i); } 2.成员变量,输出0 int i; @Test public ...
- 类中被final修饰的成员变量需要初始化
类中被final修饰的成员变量需要初始化,否则编译不通过,因为final修饰后不能再赋值,因此必须初始化.
- Spring boot变量的初始化顺序
起因是Spring建议”总是在您的bean中使用构造函数建立依赖注入.总是使用断言强制依赖”,而且之前用@Autowired时idea总是给警告,于是全部改成了构造器注入,运行时发生了循环注入,于是找 ...
- C++类中成员变量的初始化总结(转帖)
本文转自:C++类中成员变量的初始化总结 1. 普通的变量: 一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行. 1 class CA ...
随机推荐
- 在Eclipse中执行、配置Hadoop
版权全部: zhe-jiang.he@hp.com 严禁转载! 1.安装插件 准备程序: eclipse-3.3.2(这个版本号的插件仅仅能用这个版本号的eclipse) hadoop-0.20.2 ...
- eclipse删除的文件如何恢复。
1.如果不小心删除了单个文件或者文件夹. 鼠标点击上级目录 Ctrl+z就可以恢复了. 如果没有恢复,就右击项目,选择Resore from Local History 然后选择你所删除的文件,选择恢 ...
- LeetCode40.组合总和|| JavaScript
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. ...
- tomcat启动超时, Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds...
本文转自于:http://www.cnblogs.com/yjhrem/articles/2955207.html
- vue组件中,iview的modal组件爬坑--modal的显示与否应该是使用v-show
这是我第一次写博客,主要是记录下自己解决问题的过程和知识的总结,如有不对的地方欢迎指出来! 需求:点击btn,弹出modal显示图表(以折现图为例) 这应该是很基本的需求也是很容易实现的,代码和效果如 ...
- hdu Exponentiation高精度实数乘幂(用了带小数的高精度模板)
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #i ...
- Python 整数 长整数 浮点数 字符串 列表 元组 字典的各种方法
对于Python, 一切事物都是对象,对象基于类创建!! 注:查看对象相关成员var,type, dir 一.整数 如: 18.73.84 每一个整数都具备如下需要知道的功能: def bit_len ...
- Python爬虫——Scrapy整合Selenium案例分析(BOSS直聘)
概述 本文主要介绍scrapy架构图.组建.工作流程,以及结合selenium boss直聘爬虫案例分析 架构图 组件 Scrapy 引擎(Engine) 引擎负责控制数据流在系统中所有组件中流动,并 ...
- 第一篇 C/C++基本语言类型
总概: { C:面向过程,以过程为中心,以算法为驱动 } { C++:面向对象,以过对象中心,以消息为驱动 个人理解:一切皆对象的思想 } 一 前言总概 1.常量变量 初始化对象与赋值是两个概念 直接 ...
- SELinux初学者指南
SELinux(Security Enhanced Linux)是美国国家安全局2000年发布的一种高级MAC(Mandatory Access Control,强制访问控制)机制,用来预防恶意入侵. ...