c++函数返回类的引用 转

 
程序如下:
#include <iostream>
using namespace std;
class C {
public:
 void set( int n ) { num = n; }
 int get()  { return num; }
private:
 int num;
};
C& g() {
 C c3;
 c3.set( 123 );
 return c3;
}
int main(){
 cout<<g().get()<<endl;
return 0;
}
请问各位大侠,输出的结果并不是123。而是别的值。我有两个问题,1.为什么结果不是123?2.那就目前程序输出的那个结果什么东西?谢谢~~

问题补充:

如果把g()改成C类型而不是C的&,那么程序是没问题的,关键就在于为什么改成C&就不能正确输出?先谢过一二楼的朋友,但还是不够深入,请各位大侠继续指点下我吧。多谢!
如果是说return c3执行完后c3便被清楚了,那我定义g()函数为int类型为什么却可以正确读取呢?比如
int &g(){
    int i=5;
    return i;
}
在main函数中调用g()可以正确打印5,请问这跟上面的程序有什么区别呢?谢谢~~
 
 
引用就是变量的别名,返回c3的引用,返回的就是c3 ,c3被清除,再调用c3的函数,结果当然不正确;
如果返回 i 后,i被清除,但是返回值已经被输出了,结果是正确的;
返回C类型,g函数返回 的是C类型的一个对象,虽然c3被清除,但是返回的对象还能调用get函数
你可以在C类中增加一个析构函数,调试运行,你会发现,g函数里执行了一次析构函数,然后get函数后又发生了一次析构
慢慢理解吧,很难讲清楚啊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值