日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ 函数返回引用

發(fā)布時(shí)間:2025/3/21 c/c++ 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ 函数返回引用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一,c++函數(shù)的返回分為以下幾種情況

?

1)主函數(shù)main的返回值:這里提及一點(diǎn),返回0表示程序運(yùn)行成功。

2)返回非引用類型:函數(shù)的返回值用于初始化在跳用函數(shù)出創(chuàng)建的臨時(shí)對象。用函數(shù)返回值初始化臨時(shí)對象與用實(shí)參初始化形參的方法是一樣?的。如果返回類型不是引用,在調(diào)用函數(shù)的地方會(huì)將函數(shù)返回值復(fù)制給臨時(shí)對象。且其返回值既可以是局部對象,也可以是求解表達(dá)式的結(jié)果。

3)返回引用:當(dāng)函數(shù)返回引用類型時(shí),沒有復(fù)制返回值。相反,返回的是對象本身。

?

?

二,函數(shù)返回引用

?

1,當(dāng)函數(shù)返回引用類型時(shí),沒有復(fù)制返回值。相反,返回的是對象本身。先看兩示例,示例1如下:

?

const string &shorterString(const string &s1,const string &s2)

{

return s1.size < s2.size ? s1:s2;

}

?

示例2:

?

[cpp] view plaincopy
  • ostream?&operator<<(ostream?&output,?const?AAA?&aaa)??
  • {??
  • ?????output?<<?aaa.x?<<?'?'?<<?aaa.y?<<?'?'?<<?aaa.z?<<?endl;??
  • ?????return?output;??
  • }??
  • ?

    ?

    ?? ?形參和返回類型都是指向const string對象的引用,調(diào)用函數(shù)和返回結(jié)果時(shí),都沒有復(fù)制這些string對象。

    ?

    2,返回引用,要求在函數(shù)的參數(shù)中,包含有以引用方式或指針方式存在的,需要被返回的參數(shù)。比如:

    ?

    int& abc(int?a,?int?b,?int?c,?int& result){

    ? result = a + b + c;
    ?? ?return?result;
    }


    ?? ? 這種形式也可改寫為:


    int& abc(int?a,?int?b,?int?c,?int?*result){
    ? *result = a + b + c;
    ? ?return?*result;
    }


    ?? ? 但是,如下的形式是不可以的:
    int& abc(int?a,?int?b,?int?c){
    ? ?return?a + b + c;
    }

    ?

    3,千萬不要返回局部對象的引用。當(dāng)函數(shù)執(zhí)行完畢時(shí),將釋放分配給局部對象的存儲(chǔ)空間。此時(shí),對局部對象的引用就會(huì)指向不確定的內(nèi)存。如:

    const string &manip(const string &s)

    {

    string ret =s;

    return ret; ?//wrong:returning reference to a local object

    }

    ?

    4,引用返回左值。返回引用的函數(shù)返回一個(gè)左值。因此這樣的函數(shù)可用于任何要求使用左值的地方。示例見:c++ primer p215

    ?

    5,由于返回值直接指向了一個(gè)生命期尚未結(jié)束的變量,因此,對于函數(shù)返回值(或者稱為函數(shù)結(jié)果)本身的任何操作,都在實(shí)際上,是對那個(gè)變量的操作,這就是引入const類型的返回的意義。當(dāng)使用了const關(guān)鍵字后,即意味著函數(shù)的返回值不能立即得到修改!如下代碼,將無法編譯通過,這就是因?yàn)榉祷刂盗⒓催M(jìn)行了++操作(相當(dāng)于對變量z進(jìn)行了++操作),而這對于該函數(shù)而言,是不允許的。如果去掉const,再行編譯,則可以獲得通過,并且打印形成z = 7的結(jié)果。

    ?

    include?<iostream>
    include?<cstdlib>
    const int& abc(int?a,?int?b,?int?c,?int& result){
    ? result = a + b + c;
    ?? return?result;
    }


    int?main() {
    ? ?int?a = 1;?int?b = 2;?int?c=3;
    ? ?int?z;
    ? abc(a, b, c, z)++; ?//wrong: returning a const reference
    ? cout <<?"z= "?<< z << endl;
    ? SYSTEM("PAUSE");
    ?? return?0;
    }

    ?

    三,思考:

    ?? ?

    1,什么時(shí)候返回引用是正確的?而什么時(shí)候返回const引用是正確的??

    ?

    ?? ?返回指向函數(shù)調(diào)用前就已經(jīng)存在的對象的引用是正確的。當(dāng)不希望返回的對象被修改時(shí),返回const引用是正確的。


    總結(jié)

    以上是生活随笔為你收集整理的c++ 函数返回引用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。