函數傳回值是const或者const引用

來源:互聯網
上載者:User

const表明一個值是不可更改的,我一直試圖瞭解如下語句中,const的作用

const int & getInt();int & getInt();

二者的差距在於前者的傳回值是個右值,後者的傳回值是個左值。也就是說,前者返回後只能賦值給其他變數(因為它被const修飾了,也就是說這個這個變數所指向的記憶體是不能被更改的),而後者可以稱為賦值的對象。
對此,我寫了如下一個程式段:

int & getInt(int &n){   return n;}int main(){   int n=1;   int a = getInt(n);   a++;   cout<<n<<endl;   cout<<a<<endl;   return 0;}

對於這段程式,你預期的結果是什嗎?答案是:

n=1a=2

把上面程式做一個小小的修改:

int & getInt(int &n){   return n; } int main() {    int n=1;   int& a = getInt(n);   a++;    cout<<n<<endl;    cout<<a<<endl;   return 0;}

輸出是

n=2a=2

這裡涉及到函數傳回值的定義了。

通俗點來說吧,函數的傳回值大部分情況是是返回的一個右值,也就是說你在函數的外面是要這麼乾的:type name=fuction(....)。也就是說函數外面你聲明的變數(也可以說是接住函數傳回值的變數)一定是和函數傳回值類型相同的或者可以由傳回值類型轉化而成的類型。這麼一說的話,以上兩段程式也就不難理解了,因為

int a=2;int &b=a;int c=b; 

是合法的,一個引用變數(此處為b)賦值給一個普通變數是合法的,所以一個int &類型的傳回值賦值給int類型是合理的,只不過從此之後a和n(第一段程式)就天各一方,沒有任何關係了,如果此時把a聲明int &a,那麼a還是指向的n那塊記憶體,所以兩個變數還是一條繩子上的螞蚱。
當然,一種特殊的情況還是要記住的,const &可以返回一個左值!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.