构造函数之显式初始化与赋值
来源:互联网 发布:免费弄lol网吧特权mac 编辑:程序博客网 时间:2024/05/19 02:17
大部分程序员写构造函数时是这样的:
class ClassA{ ClassA(); ......};ClassA::ClassA(){ A=1; B=2; ......}
这一类构造函数包括了初始化和赋值两个步骤,在执行构造函数函数体内语句前,已经隐式调用了默认构造函数对变量进行初始化,函数体内语句其实是进行了一次赋值。
更规范的是使用初始化列表进行初始化,即显式初始化。
ClassA::ClassA():A(1),B(2) { }
使用默认构造函数时,初始化成员的规则与初始化变量规则相同,即具有类类型的成员使用默认各自的默认构造函数来初始化,内置和复合类型的全局变量初始化为0,内置和复合类型的局部作用域的变量则不初始化。
故而使用显示初始化是有好处的。第一是效率问题,因为要额外赋值一次,在函数体内赋值效率相对较低,当然如果你不在乎这一点点效率,我们还有第二条;第二条如果没有在函数体内给类成员提供初始化式,编译器会使用成员类型的默认构造函数;如果那个类没有默认构造函数,则初始化失败。另外const或引用类型的成员,无法赋值,只能在初始化列表中初始化。譬如:
class ClassA{private: int i; const int j; int &k;public: ClassA(int B); ......};ClassA::ClassA(int B){ i=B; //ok j=B; //error,不能给const对象赋值 k=i; //error,k没有初始化绑定一个对象 ......}
正确初始化方式为
ClassA::ClassA(int B):i(B),j(B),k(i){}
以上参考自《c++primer》
0 0
- 构造函数之显式初始化与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- 【C++ Primer学习笔记】构造函数初始化与赋值
- 初始化列表与构造函数中的赋值语句
- C++类初始化列表与构造函数内赋值区别
- C++ 构造函数初始化列表 与 赋值 总结
- 从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字
- 从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字
- 从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字
- Java之构造函数与初始化块
- 梧桐妹首露面 水汪汪大眼激似贾静雯
- 淘宝购物车展示效果列表清单
- 由apple sample code "LazyTableImages"谈谈scrollView的两个代理方法
- 第12期《 蓄势待发 》1月刊
- 古尺神奇
- 构造函数之显式初始化与赋值
- 正则表达式中的/\\\\/四个反斜杠含义
- php简单模拟后台接口创建类
- BZOJ3926: [Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机
- php中for循环嵌套问题 急,!!!
- 观《啊哈算法》,积累代码(c++实现)
- jetty 初涉——eclipse插件安装
- Struts文件上传
- OkHttpUtils的用法