1. 程式人生 > >7.2、函式返回值為引用左值和右值問題

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,也會分配記憶體空間。