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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++函数返回值与引用

發布時間:2025/3/21 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++函数返回值与引用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于函數的返回值,看似簡單,但并非如此,比如:

int func(int a);該函數會返回一個int型,如果進行一個調用int result=func(3);會發生什么情況?

首先,func將返回值復制到一個匿名臨時變量中,在這里假設該臨時變量為anony(其實是沒有名字的,這里方便闡述);然后,再將anony的值復制到result,可以看出,這里是進行了兩次復制的。而并非一次復制。

?

對于返回引用的函數:

int & func(int &a);假設該函數傳入一個int的引用,然后再func中修改它,再返回其引用,如果調用int reslut=func(b);會發生如下情況:

返回的是b的引用,因此相當于直接將b的值復制給了result。這里就只有一次復制(少了臨時變量的復制,當然也創建了一個臨時變量,只是該臨時變量是b的一個引用)。

需要特別注意的是,按很多人的理解,這里返回的是一個引用,因此result就是b的引用,其實并非如此,這里返回引用只是減少了一次臨時變量值的復制。如果真的要讓result能夠引用b,可以這樣做:int &result = func(b);

注:返回普通變量的引用看不出效率的差異,但是返回比較大的類或者結構體的時候效率差異比較明顯。

?

那如果是這樣申明函數int func(int a);注意,這里返回的不是引用。然后int &result=func(a);會發生什么情況呢?

如果是這樣,編譯器將報錯:不能用一個臨時變量來初始化一個非常量的引用變量。

要消除這種報錯,可以這樣寫const int &result=func(a);這樣雖然返回的不是引用,但是由于最后賦給的是一個引用變量,因此在返回過程中也只有一次復制過程。但是這樣的result是不能修改其引用的內容的。

?

還有一種看似更為詭異但卻十分合理的情況:

int &func (int &a);同樣假設該函數傳入一個int的引用,在func中修改它,然后返回其引用。然后這樣調用func(b)=3;這樣的后果是,傳入的b的值變為3。原因是func返回了一個b的引用,然后再將該引用賦為3,因此b的值也變成了3。

如果要禁止這種情況的發送,可以這樣聲明函數:const int &func(int &a);這樣返回的是一個const引用,它不允許使用該引用修改其指向的值。因此如果有func(b)=3這樣的調用,將通不過編譯。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。