`
coolsooner
  • 浏览: 1313678 次
文章分类
社区版块
存档分类
最新评论

C++讨厌的临时变量什么时候产生

 
阅读更多

作者:陈太汉

是的。我们讨厌产生临时变量,因为它要占用我们的内存,消耗我们的CPU时间,让我们的程序性能降低。但有时候它是必须的。

那讨厌的临时变量什么时候产生呢?

产生临时变量的三种情况:一:以By Value的方式传值;二:参数为const的类型。三:类型转换
一:以By Value的方式传值。
我们都知道,引用类型和指针类型传递的都是地址,可以直接对地址中存放的数据进行操作,
而以传值的方式传递参数,就会在heap中重新分配一个临时区域,
将实参中的数据拷贝到临时区域中,而你对这分数据进行的任何的操作都不会影响实参的内容,因为实参跟形参只是内容相同,
分别在两块不同的内存中。而引用和指针操作的是同一块内存,所以形参修改后,实参也修改了。
二:参数为const的类型。
因为常量是不能修改,在只需要实参中的数据,而不需对实参进行修改时,或是禁止对实参进行修改时,把形参定义为const类型,
系统会产生一个临时变量,就能起到保护数据的作用,如在函数strlen中,修改参数的值行吗?本来只是想得到实参的长度,结果在函数中被修改了,那得到得实参长度还是真实的吗。
如果你程序中的数据到处都可以被修改,那是多么的可怕(所以我们讨厌全局变量),所以const还是有它存在的价值。
三:类型转换的时候会产生临时变量。
真是糟糕啊,在用类型转换带来便利的同时,产生临时变量就是我们承担的损失。
如将一个short类型转换成int类型,他们占用的内存不一样,如果不产生临时变量,那不就short类型和int类型占用的字节数不就一样了吗,sizeof不就坑爹了吗

C++语言禁止为非常量引用产生临时对象。同时证明引用类型传参不会产生临时变量,如char[]转换成string会报错,他们都是引用类型

以下是我自己写的基本函数,练手啊,下面这些函数参数前面很多都加了const,那不是到处都在产生临时变量吗?我在想,我就不要const,我就不准对这些参数进行任何修改,行吗?
谁能给我答案?我只想在不需要产生临时变量的时候不让它产生......跟着标准走吧。


分享到:
评论

相关推荐

    深入解析C++中的临时变量

    从操作系统底层 深入解析C++中的临时变量

    C++中的临时变量

    C++中的临时变量它们是被神所遗弃的孩子,没有人见过它们,更没有人知道它们的名字.它们命中注定徘徊于命运边缘高耸的悬崖和幽深的深渊之间

    C++全局变量初始化的一点总结

     根据 C++ 标准,全局变量的初始化要在 main 函数执行前完成,常识无疑,但是这个说法有点含糊,main 函数执行前到底具体是什么时候呢?是编译时还是运行时?答案是既有编译时,也可能会有运行时(seriously), 从...

    c++修改系统环境变量

    c++实现修改环境变量,原帖地址忘记了,是在网易博客上找到的,分享给大家。

    C++编程变量命名规范

    C++变量命名规范,有关项目的全局变量用g_开始,类成员变量用m_,局部变量若函数较大则可考虑用l_用以显示说明其是局部变量

    C++中类使用全局变量

    在C++中,声明一个类,并且定义一个全局变量,练习全局变量的使用。注意全局变量的使用技巧和方法。

    C++变量名规则

    常见的C++语言中变量名称的命名规则,基本涵盖了常用的一些变量说明

    C++——字符串变量.txt

    处理字符串,除了字符数组,还有用C++的string类型来定义一个字符串变量(对象)。 定义字符串并进行初始化: string string1="chance"; 注意:必须要有头文件# include ; 比较:字符数组不能直接对字符变量进行...

    一个案例 c++ 局部变量 全局变量 形式参数 实际参数练习.cpp

    一个案例 c++ VS2017 局部变量 全局变量 形式参数 实际参数练习 一个案例 c++ VS2017 局部变量 全局变量 形式参数 实际参数练习 一个案例 c++ VS2017 局部变量 全局变量 形式参数 实际参数练习

    解决C++全局变量只能初始化不能赋值的问题

    C++中,全局变量只能声明、初始化,而不能赋值 也就是说,下面这样是不被允许的: #include using namespace std; int a; a = 2; int main() { return 0; } 错误提示是: C++ requires a type specifier for all...

    C++类变量声明

    C++类变量声明,验证与java类声明不同的Demo

    C++变量总结 说明各种变量

    在计算机中,保存变量当前值的存储单元有两类,一类是内存,另一类是CPU中的寄存器,变量的存储属性就是讨论变量的存储位置的,C语言中定义了四种存储属性,即自动变量、外部变量、静态变量和寄存器变量,它关系到...

    C++变量命名规则

    主要是C++变量命名规则的一些常规用法。

    C++各变量的区别

    C++ 全面基础知识要点之变量 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,...

    C++和C#变量对应表

    C++和C#变量对应表 方便需要使用c#调用c++写的dll 时接口变量的查找对比

    C++ const引用、临时变量 引用参数详解

    C++引用—临时变量、引用参数和const引用 如果实参与引用参数不匹配,C++将生成临时变量。如果引用参数是const,则编译器在下面两种情况下生成临时变量: 实参类型是正确的,但不是左值 实参类型不正确,但可以转换为...

    C++变量与标准库

    c++,经典教材,介绍变量与标准库

    C++l临时对象

    C++中存在临时对象,却很少有人发现,本文档详细介绍了临时对象的产生,存在以及应对方法,很有帮助

    一键配置java环境变量(C++编写)

    一键配置java环境变量(C++编写)

    c++ 修改注册表设置环境变量

    c++ 修改注册表设置环境变量, 广播使其立即生效,压缩包内有代码,更换变量路径即刻使用

Global site tag (gtag.js) - Google Analytics