C++ 构造函数的初始化列表
来源:互联网 发布:100到999的水仙花数vb 编辑:程序博客网 时间:2024/06/05 06:59
在C++中,一个简单的构造函数可以如下所示:
class X{ private: int i_; int j_; public: X(int i, int j) { i_ = i; j_ = j; }};
C++也提供了另外一种初始化成员变量的写法,即初始化列表:
class X{ private: int i_; int j_; public: X(int i, int j):i_(i), j_(j){}};
第二种写法,就是构造函数初始化列表。那么问题来了,为什么要使用这个方法来写构造函数呢?有什么好处吗?那就要从C++的变量初始化说起。
C++变量初始化
首先,C++变量初始化有2种方法,直接初始化和复制初始化。复制初始化就是使用=号的初始化,而直接初始化就是使用()符号进行的初始化。
比如:
int age(20); //直接初始化int age = 20; //复制初始化
复制初始化使用 = 号,很容易让人以为是进行了赋值操作而不是初始化操作,但是两者并不是一回事,初始化是给变量分配内存并且给它赋值,而赋值就是替换当前变量的值。
也就是说:
int age = 20; //初始化age = 30; //赋值
第一行代码是初始化,第二行代码是赋值,虽然它们都是用了 = 号。
直接初始化比复制初始化更快,更灵活,大部分时间,看不出它们之间的区别,但在编写类的时候,就可能会看出来它们的区别。直接初始化时,编译器会调用构造函数直接赋值,而复制初始化时,编译器会先调用直接构造函数创建一个临时的对象,然后再调用复制构造函数进行赋值,所以直接初始化会更快。有时候,有些不支持复制的类型,就不能用复制初始化了。
因此,使用初始化列表,可以使初始化效率更高。
避免编译时期错误
还有一个更重要的原因,是因为使用初始化列表,可以避免编译时期的错误,因为有些成员变量,必须在初始化时赋值的。比如const 变量,还有一些没有默认构造函数的类,在初始化时,需要显式的传入参数进行初始化。
0 0
- 【C/C++】构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数的初始化列表
- 构造函数初始化列表(C++)
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- linux_ 25 Useful Basic Commands of APT-GET and APT-CACHE for Package Management
- Linux C语言下UDP实现指定端口收发数据实例
- linux_十个鲜为人知的 Linux 命令
- ORACLE 中 DECODE 与 CASE WHEN THEN 用法
- linux_ubuntu解压zip乱码
- C++ 构造函数的初始化列表
- 微擎 后台背景修改
- linux_Switching From Windows to Nix
- Phoenix综述(史上最全Phoenix中文文档)
- linux_13 Basic Cat Command Examples in Linux
- 「·部署·」安装与使用 Spark-jobServer
- linux_20 Advanced Commands for Middle Level Linux Users
- linux_12 Practical Examples of Linux grep Command
- OpenGL_GLUT(一)_vs2013中配置gult库