| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 615 人关注过本帖
标题:局部变量和临时变量的区别
只看楼主 加入收藏
mmppllhaha
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-9-8
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:2 
局部变量和临时变量的区别
有个程序如下,最后结果为:
destructor:this=0x241ff2c,num=3
destructor:this=0x241ff5c,num=3
书上说第一个是fun2()的内部局部变量析构,第二个是fun2的返回临时对象析构
怎么理解呢?
#include<iostream>
using nameespace std;
class Test
{
public:
Test():num(0){}
Test(int number):num(number){}
~Test()
    {
        cout<<"destructor:this="<<this<<",num="<<num<<endl;
    }
private:
    int num;
};
Test fun2()
{
    Test t(3);
        return t;
}
int main(int argc,char* argv[])
{
fun2();
    return 0;
}
搜索更多相关主题的帖子: number public 
2012-09-10 14:51
眼底星空
Rank: 4
等 级:业余侠客
威 望:3
帖 子:85
专家分:289
注 册:2006-9-2
收藏
得分:10 
第一个析构是fun2函数内的对象t的析构。
第二个是fun2函数返回的对象的析构,未被使用所以未用一个变量命名而已。
个人认为书上就爱扯概念,所谓的临时对象性质和行为上是和局部变量一样的。

无为而为 && 每天进步一小点...
2012-09-10 17:39
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:10 
有的编译器可能只输出一次。
原因是 Test t(3); return t; 就直接被看成 return t(3);。

这个临时变量的概念,标准规定的是不死的。
编译器生成代码的时候可以在一些场合增加一些中间变量,称为临时变量。但应当尽量减少临时变量的使用,像这种场合就可以少用一个临时变量。
按照标准,这整个过程最多只能用两个临时变量。你的书是按最多(或者说最复杂的)的情况讲解的。
2012-09-10 23:03
快速回复:局部变量和临时变量的区别
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011838 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved