引用---引用型返回值

一.返回左值

•值形式的函数返回值通常都具有右值属性,即在函数的调用者空间根据函数的返回类型创建一个匿名对象,负责接收该函数的返回值

•用于接收函数返回值的匿名对象和表达式的值类似,通常只具有语句级生命期且只读,即所谓将亡右值

•如果函数返回的是一个引用,那么用于接收该返回值的就不再是一个匿名的将亡右值对象,而是一个引用该函数所返回引用的目标对象的引用,甚至可以是左值引用

•函数返回的左值引用可与其它任何形式的左值一样,参与包括赋值、复合赋值、自增减等在内的各种左值运算

二.不能返回局部变量的引用

•函数的局部变量只具有函数级甚至块或语句级的生命周期,函数一旦返回,所有的局部变量即刻销毁,即使通过返回值获得了对它们的引用,其目标也将是未定义的

int& foo (void) 
 { 
    int n = 123; 
    return n; 
 } // 危险 
 int* bar (void) 
 { 
    int n = 456; 
    return &n; 
 } // 危险 
 int hum (void) 
 { 
    int n = 789; 
    return n; 
 }

–int& foo (int& n) 
 { 
    return n; 
 }
 int& bar (int* n) 
 { 
    return *n; 
 } 
 int& hum (int n) 
 { 
    return n; 
 } // 危险int* foo (int& n) 
 {
     return &n; 
 } 
 int* bar (int* n) 
 { 
    return n; 
 } 
 int* hum (int n) 
 { 
    return &n; 
 } // 危险
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值