C++构造函数初始化成员列表
来源:互联网 发布:win7怎么卸载软件 编辑:程序博客网 时间:2024/06/09 18:13
C++初始化成员列表
a.const成员变量
b.引用类型的成员变量
c.static不能在初始化列表中进行初始化
d.类成员变量中有自定义类型的变量最好在初始化列表中进行初始化
2.初始化列表的顺序?
初始化列表的初始化顺序是依据类成员变量定义的顺序来决定的。
3.关于static const是否应该在初始化成员列表中初始化?
static const为全局静态常量,全局的意思是该变量属于整个类而非某个类实例,所以不能再初始化列表中进行初始化。
1 好多书籍都建议我们直接使用初始化列表为成员进行初始化,为什么呢?
我想原因有二:
①考虑到效率
②有些成员不得不这么做(const,引用)
为什么使用初始化列表就效率呢?
其实也不一定,
对于内置类型,在函数体内赋值和在初始化列表中初始化两者的效率是等同的。但是为了美观和一致性的问题,《Effective C++》作者建议我们还是用初始化列表进行。但是这也不是在所有情况下都是必须的。若一个类的构造函数很多的时候,这时每个构造函数都有自己的初始列,这样多份成员的初始列就会导致烦人的重复。这时我们可以选择那些“赋值表现得像初始化一样好”的成员变量,改用它们为赋值。然后把他们放到一个函数中,供所有的构造函数调用。
对于类类型,两者的效率就相差很多了:
初始化列表的执行发生在进入函数体之前,它是在调用构造函数是进行初始化的。而对于函数体内的赋值(非初始化,而是赋值),它是首相调用了类的默认构造函数来初始化成员变量,而后在函数体中调用赋值函数为成员变量赋值的。显然这个和初始化列表相比默认构造函数的调用就浪费了。效率低了很多。
有些成员变量必须用初始化列表
const 和引用 类型的成员变量必须得用初始化列表进行初始化。其实这没什么高明的,也并不是一个明文规定。而是为遵守我们另一个规则而必须这么做。这个规则就是”const和引用类型的变量必须初始化“。而我们通过上面也明白了,函数体内是赋值而非初始化,若我们将const和引用类型的成员变量放在构造函数的函数体内的话。那么const和引用类型的变量将会没有初值,即没被初始化,根据我们另一个规则,当然会发生错误,编译器不允许我们这么做的。故:我们在构造函数中必须选择初始化列表对const和引用类型的成员变量进行初始化。
- 构造函数的成员初始化列表
- C++构造函数初始化成员列表
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- 必须在构造函数的成员初始化列表里初始化
- 成员初始化列表和构造函数体初始化的区别
- 学习笔记:数组成员初始化于构造函数初始化列表
- c++构造函数成员初始化赋值和初始化列表
- 【C/C++】构造函数的初始化列表
- 构造函数初始化列表(C++)
- C/C++基础问答(1):通过初始化列表和构造函数内赋值初始化成员变量的区别
- 拷贝构造函数,也可以使用成员初始化列表语法
- 20.struts2_国际化
- 预先派生子进程(preforking)
- fcn拟合结果(2)
- 支持多种形式的新闻滚动、跑马灯效果
- 判断链表环相关的面试题
- C++构造函数初始化成员列表
- allegro出光绘文件出现的几个问题
- Chrome开发者工具指南
- MATLAB实用绘图技巧
- maven项目docker插件自动部署——war包
- Android 使用tcpdump抓包分析
- vue图示
- 在ubuntu16.04下使用shadowsocks command client安全上网
- UVa 1312 Cricket Field【暴力】