7.2、函数返回值为引用左值和右值问题

#include<iostream>
using namespace std;

/**
* @brief p
* @return
* 函数返回值为引用:
1、当函数的 返回值的是一个局部变量引用的时候,
   不可以成为其他的引用的初始值;
   不能够作为左值使用。
2、如果返回 的是 静态变量和全局变量引用时。
	可以成为其他的引用的初始值;
    能够作为左值使用。
*/



/**
 * @brief p
 * @return
 * 函数返回值为引用
 */
int  p(){
   int a=10;
   return a;

}
//1、因为当函数返回的是一个引用,相当于返回了这个函数的地址。 它的底层实现是 int * const a; 相当于 int & a;
int & p2(){
   int a=10;
   return a;
}

int  p3(){
   int a=10;
   return a;
}



/**
 * @brief p
 * @return
 * 函数返回值为引用
 */
int  j(){
  static int a=10;  //定义静态变量
   return a;

}
int & j2(){
  static int a=10;
   a++;
   return a;
}

int main12345(){
    int  a=10,b=20;

    a=p(); //表示的是返回了的是一个值。

     b=p2();//返回的是一个值。如果接受的是一个引用才会转化为 地址。引用的本质是一个地址。

    int & c=j2();  //返回的是一个地址,相当于接受的是一个地址。 相当于 *p

    cout<<a<<" "<<b<<" "<<c<<endl;

}


int main(){

   j2()=10;  //引用的返回值当左值   只有静态的全局变量的返回值可以做左值。

   int & c=j2();  //引用的返回值当右值。

   int  a=j();

   int  b=j2();

   cout<<a<<endl;

   cout<<c<<endl;

}

结论:

1、在c语言中,const 修饰的变量是只读变量,是只读变量,有自己的内存空间。

2、在c++中,const 常量,有可能分配空间,有可能不会分配内存空间。

     当const 修饰全局常量,并且需要在其他文件中使用,则会分配内存空间。

      当&操作时,取const 地址时,修饰引用时,会分配存储空间。

      当const 修饰引用时,const  int &a=10,也会分配内存空间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值