15、不一样的C++系列--临时变量
来源:互联网 发布:微信源码下载 编辑:程序博客网 时间:2024/06/01 08:33
临时变量
首先看一段代码:
#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++编译器会尽力避开临时对象
- 实际工程开发中需要人为的避开临时对象
阅读全文
0 0
- 15、不一样的C++系列--临时变量
- 不一样的C语言-变量
- [c/c++]临时变量、局部变量,return的效率
- 不一样的C语言-const修饰的变量
- 1、不一样的C++系列--C到C++的升级
- 37、不一样的C++系列--C语言异常处理
- C/C++中的临时变量
- C++的临时变量
- 不用临时变量交换两个数的值(C实现)
- C++,局部变量在栈上的地址,Release 和 Debug版本是不一样的
- C语言中返回局部变量或临时变量的地址的错误
- C语言实现两个整形变量的值的交换,不使用临时变量
- 奇怪了,同一个变量在不同的.c中,程序运行不一样
- C中不使用临时变量交换两个变量的值
- C中不使用临时变量交换两个变量的值
- [C语言]不允许创建临时变量,交换两个变量的内容
- 【c语言】 交换两个整形变量的值(要求不创建临时变量)
- C/C++ waring:返回局部变量或临时变量的地址
- Q110:PBRT-V3十大基类对应的继承关系
- 25个经典的Spring面试问答
- 使hover出来的图片居中显示
- Spring事务配置及事务的传播性与隔离级别详解
- 【C++】【LeetCode】31. Next Permutation && 46. Permutations
- 15、不一样的C++系列--临时变量
- 产品原型设计
- input输入子系统分析
- A计划
- GitHub
- tensorflow的完整的hello world教程(检测自己手写识别数字)
- spark-2.0原理分析-shuffle过程
- 9. Palindrome Number
- PLA-感知机学习算法