注册 登录
编程论坛 C++教室

局部变量和临时变量的区别

mmppllhaha 发布于 2012-09-10 14:51, 615 次点击
有个程序如下,最后结果为:
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;
}
2 回复
#2
眼底星空2012-09-10 17:39
第一个析构是fun2函数内的对象t的析构。
第二个是fun2函数返回的对象的析构,未被使用所以未用一个变量命名而已。
个人认为书上就爱扯概念,所谓的临时对象性质和行为上是和局部变量一样的。
#3
pangding2012-09-10 23:03
有的编译器可能只输出一次。
原因是 Test t(3); return t; 就直接被看成 return t(3);。

这个临时变量的概念,标准规定的是不死的。
编译器生成代码的时候可以在一些场合增加一些中间变量,称为临时变量。但应当尽量减少临时变量的使用,像这种场合就可以少用一个临时变量。
按照标准,这整个过程最多只能用两个临时变量。你的书是按最多(或者说最复杂的)的情况讲解的。
1