7.2、函式返回值為引用左值和右值問題
阿新 • • 發佈:2019-02-17
#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,也會分配記憶體空間。