temp是值.temp的值会储存在调用TestFun()的函数的栈中.

解决方案 »

  1.   

    是吗?那么temp的地址是&temp了!哦,是的,经常这样用。这样理解是不是就可以了(&temp 是地址那么temp就是值了)!
      

  2.   

    返回的肯定是temp这个对象了,如果你没有重载这个对象的=操作符,这个返回之也没用了.(这种说话有点问题)
      

  3.   

    是值!其实道理和返回一个整型的一样的。想想怎么返回一个int的吧!
      

  4.   

    to :
     回复人:admireO(初学者) (2001-6-22 12:21:00)  得0分 
    返回的肯定是temp这个对象了,如果你没有重载这个对象的=操作符,这个返回之也没用了.(这种说话有点问题)  什么意思?如果真的不重载这个对象的=操作符就不行吗?好象可以吧!
      

  5.   


    class MyClass
    {
    ...
    };
    MyClass TestFun()
    {
        MyClass temp;
        ...
        return temp; // is this ok?
    }
    这样肯定是不能实现你的要求,因为错误有二:
    1、MyClass temp是TestFun()函数的局部变量,该变量在函数返回后将不存在
    (即被释放掉了!!),
    2、return temp是不会返回一个类实体的。解决的方法:MyClass  *TestFun()
    {
        MyClass *pTemp = new MyClass; // 函数返回后,该实例还有效!!    ...
        return pTemp; // 返回实例的指针!
    }
      

  6.   

    两种都可以的
    class MyClass
    {
    ...
    };
    MyClass TestFun()
    {
        MyClass temp;
        ...
        return temp; // is this ok?
    }
    MyClass ss=TestFun();
    内部对象是释放了,但是都拷贝给了接受实例。
      

  7.   

    在《深入探索c++对象模型》之中说,这个函数会被编译器改成这样:
    MyClass TestFun()
    {
        MyClass temp;
        ...
        return temp; // is this ok?
    }
    改成
    void TestFun(MyClass& _result)
    {
        MyClass temp;
        ...
        _result=temp; // is this ok?
    }
    而象这样的调用:
    MyClass testclass;
    testclass=testfun();
    改成
    MyClass testclass;
    testfun(testclass);
      

  8.   

    to:Sunny_lin(大和尚),
    您的说法肯定有问题!如果按你所说,那么如下的程序正确?
    int* TestFun()
    {
        int iTmp;
        
        ...
        return &iTmp;
    }可是这个程序在VC下编译就会给出警告错误!
      

  9.   

    to:Sunny_lin(大和尚):
    您的说法肯定有问题!如果您说的对,那么下面的函数就对了:int* TestFun()
    {
        int iTmp;
        ...
        return &i; //fail!!!!!!
    }肯定有问题!如果你在VC下编译,就会有警告错误给出!
      

  10.   

    我的说法肯定正确!!MyClass *pTemp = new MyClass; // 函数返回后,该实例还有效!!
    这里使用new的目的是在内存中新建一个对象,这个对象将一直存在直到delete该对象,To (剿匪总司令) :
    int* TestFun()
    {
        int iTmp;
        ...
        return &i; //fail!!!!!!
    }这里的 int iTmp 是存在于堆栈中,TestFun函数返回后,该变量就被释放了(即无效了)
    ,因此肯定是错误的!!!
    To jamesye78(江月):
    你的说法有问题,按照你的方法,你的类必须有 拷贝构造 方法,否则将会错误。To liu_feng_fly(一只菜鸟,忽忽悠悠的就飞来了!!) :你想使用 _result=temp 来对类付值,那么这个类必须有拷贝构造 ,
    否则该类必须重载 = 操作符。
    关于这些内容,在清华大学《C++教程》(不是潭好强的)中有。
      

  11.   

    正如liu_feng_fly所说, 这个问题在《深入探索c++对象模型》中已经讲的很清楚了. 如果你的类仅仅是一个简单的结构或类(没有虚拟函数,没有虚拟继承,没有指针成员变量), 这样写是完全没有问题的,只不过效率有可能较差(会产生和销毁临时变量). 如果你的类不是一个简单类, 那么要定义你的COPY CONSTRUCTOR 和重载"=".
      

  12.   


    to Sunny_lin(大和尚):
    你不知道有default copy constructor得吗
      

  13.   

    to :Sunny_lin(大和尚) 
    《深入探索c++对象模型》上说,默认的是按位拷贝,这是编译器在需要的时候会自动给你一个,就象构造函数一样
      

  14.   

    liu_feng_fly说得对!
    class MyClass
    {
    ...
    };MyClass TestFun()
    {
        MyClass temp;
        ...
        return temp; // is this ok?
    }
    当调用TestFun函数时,编译器同时传了一个MyClass类型结构的指针给它,
    该指针指向栈中某一块内存,当函数返回时,会将temp的所有内容复制到该指针所
    指的内存块中返回,所以以上函数是正确的.