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

#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;

}

猜你喜欢

转载自blog.csdn.net/qq_30272539/article/details/81390900