电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

C++中的临时变量

C++中的临时变量_第1页
1/10
C++中的临时变量_第2页
2/10
C++中的临时变量_第3页
3/10
C ++的临时变量 它们是被神所遗弃的孩子,没有人见过它们,更没有人知道它们的名字.它们命中注定徘徊于命运边缘高耸的悬崖和幽深的深渊之间, 用自己短暂的生命抚平了生与死之间的缝隙.譬如朝露,却与阳光无缘.是该为它们立一座丰碑的时候了,墓铭志上写着:我来了,我走了,我快乐过. 许多人对临时变量的理解仅仅限于: string temp; 其实,从 C++的观点来看,这根本就不是临时变量,而是局部变量. C++的临时变量是编译器在需要的时候自动生成的临时性变量,它们并不在代码中出现.但是它们在编译器生成的二进制编码中是存在的, 也创建和销毁.在 C++语言中,临时变量的问题格外的重要,因为每个用户自定义类型的临时变量都要出发用户自定义的构造函数和析构函数(如果用户提供了) 又是该死的编译器!又该有人抱怨编译器总在自己背后干着偷偷摸摸的事情了.但是如果离开了编译器的这些工作,我们可能寸步难行. 如果 X 是一个用户自定义的类型,有默认构造函数,拷贝构造函数,赋值运算函数,析构函数(这也是类的4 个基本函数),那么请考虑以下代码: X get(X arg) { return arg; } X a; X b = get(a); 即使是这么简单的代码也是很难实现的 让我们分析一下代码执行过程中发生了什么? 首先我要告诉你一个秘密:对于一个函数来说,无论是传入一个对象还是传出一个对象其实都是不可能的. 让一个函数传入或传出一个内置的数据类型,例如int,是很容易的,但是对于用户自定义类型得对象却非常的困难,因为编译器总得找地方为这些对象 写上构造函数和析构函数,不是在函数内,就是在函数外,除非你用指针或引用跳过这些困难 那么怎么办?在这里,编译器必须玩一些必要的小花招,嗯,其中的关键恰恰就是临时变量 对于以对象为形参的函数: void foo(X x0) { } X xx; foo(xx); 编译器一般按照以下两种转换方式中的一种进行转换 1.在函数外提供临时变量 void foo(X& x0) //修改 foo 的声明为引用 { } X xx; //声明 xx X::X(xx); //调用 xx 的默认构造函数 X __temp0; //声明临时变量__temp0 X::X(__temp0, xx); //调用__temp0 的拷贝构造函数 foo(__temp0); //调用 foo X::~X(__temp0); //调用__temp0 的析构函数 X::~X(xx); //调用 xx 的析构函数 2.在函数内提供临时变量 void foo(X& x0) //修改 foo 的声明为引用 { X __temp0; //声明临时变量__temp0 X::X(__temp0, x0); //调用__temp0 的拷贝构造...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

C++中的临时变量

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部