15、不一样的C++系列--临时变量
2017-06-11 11:39
176 查看
临时变量
首先看一段代码:#include <stdio.h> class Test { int mi; public: Test(int i) { mi = i; } Test() { Test(0); } void print() { printf("mi = %d\n", mi); } }; int main() { Test t; t.print(); return 0; }
这个时候可以想一想会输出什么? mi的值是什么?
运行结果如下:
mi = 515686454
程序意图:
在Test()中以0作为参数调用Test(int i)
将成员变量mi的初始值设置为0
运行结果:
成员变量mi的值为随机值
答案:
直接调用构造函数将产生一个临时对象
临时对象的声明周期只有一条语句的时间
临时对象的作用于只在一条语句中
临时对象是C++中值得警惕的灰色地带
那说到这里,如何避开这个陷阱,又能解决刚才的问题呢?
#include <stdio.h> class Test { int mi; void init(int i) { mi = i; } public: Test(int i) { init(i); } //在这里调用成员函数初始化,不能直接调用构造函数 Test() { init(0); } void print() { printf("mi = %d\n", mi); } }; int main() { Test t; t.print(); return 0; }
小结:
直接调用构造函数将产生一个临时对象临时对象是性能的瓶颈,也是bug的来源之一
现代c++编译器会尽力避开临时对象
实际工程开发中需要人为的避开临时对象
相关文章推荐
- C/C++中的临时变量
- C++中的临时变量
- C++的临时变量
- C++中返回临时变量指针问题
- C++中的临时变量
- C++临时变量的另类应用:基于iostream的类型安全的log接口设计
- C++中的临时变量
- C++讨厌的临时变量什么时候产生
- c++中临时变量不能作为非const的引用参数
- C++中的临时变量[转]
- [c/c++]临时变量、局部变量,return的效率
- 临时变量问题 C++问题
- C++临时变量的另类应用:基于iostream的类型安全的log接口设计
- C++讨厌的临时变量什么时候产生
- c++陷阱之临时变量
- C++中的临时变量
- C/C++面试之算法系列--不申请变量和空间反转字符串
- C/C++笔试系列--如何利用成员变量作为成员函数的默认参数
- string变量字符串的结束标志是什么,我看书上好像和c不一样,c的char *是以"\0"结束但c++好像不是
- C++中函数建立临时变量的机制(const)