第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

為什么要用Array&呀

Array& printinfo()

{

return *this;

} ? ??

為什么要用Array&,直接返回Array不行么

正在回答

3 回答

可以直接返回Array,但這樣并不好。

&這表明返回的是array引用。

類成員函數(shù)有時(shí)打算返回類實(shí)例自身,就會(huì)返回*this的引用。

而有時(shí)并不一定需要返回自身,但仍會(huì)選擇返回引用,原因如下:

函數(shù)在返回值的時(shí)候,是先用你要返回的變量去構(gòu)造一個(gè)臨時(shí)變量,再將這個(gè)臨時(shí)變量返回給接受返回值的調(diào)用者。在調(diào)用者使用過后,這個(gè)臨時(shí)變量再被自動(dòng)銷毀。

如果返回的是一個(gè)很大的類實(shí)例的話,構(gòu)造這個(gè)臨時(shí)變量會(huì)調(diào)用拷貝構(gòu)造函數(shù),這可能造成很大的運(yùn)行開銷(例子中的情況下array會(huì)被整個(gè)復(fù)制一遍)。為了減少這種負(fù)面影響,在一些情況下會(huì)選擇返回引用類型。注意:這不會(huì)改變函數(shù)返回時(shí)的行為,即——還是會(huì)將這個(gè)引用臨時(shí)復(fù)制一份——但復(fù)制引用類型的開銷基本上可以忽略不計(jì)。

但需要萬分注意:返回引用類型時(shí)必須要保證被引用的變量要在函數(shù)退出后仍存在(不然返回的那個(gè)引用指向誰呢?!) ?當(dāng)然這個(gè)代碼中這樣用沒有問題,因?yàn)樵谡{(diào)用過后 arr1 肯定還是存在的。


P.S. 較新的C++11標(biāo)準(zhǔn)中增加了“右值引用”特性,很好地解決了函數(shù)返回時(shí)臨時(shí)變量的麻煩。

5 回復(fù) 有任何疑惑可以回復(fù)我~
#1

onemoo

續(xù)上,沒看完整個(gè)視頻,回答得不準(zhǔn)確。 看到視頻中在調(diào)用過 printinfo 函數(shù)后,緊接著又調(diào)用了 setLen。 那么如果是直接返回Array,則調(diào)用setLen是調(diào)用那個(gè)臨時(shí)變量的setLen,也就是改變的是臨時(shí)變量的len。 arr1的len不會(huì)有任何改變。 既然目的是要返回類實(shí)例自身,就更要將返回類型聲明為引用了。
2015-10-18 回復(fù) 有任何疑惑可以回復(fù)我~
#2

qq_賽塞澀_0 提問者

非常感謝!
2015-10-18 回復(fù) 有任何疑惑可以回復(fù)我~
#3

培根熏肉

不明白的是什么叫一個(gè)函數(shù)返回類型為一個(gè)類?暈死啊
2016-01-09 回復(fù) 有任何疑惑可以回復(fù)我~
#4

onemoo 回復(fù) 培根熏肉

函數(shù)是有返回類型的,這個(gè)返回類型就是聲明函數(shù)時(shí)寫在函數(shù)名前面的那個(gè)類型。 Array printinfo() // 這個(gè)printInfo函數(shù)的返回類型就是Array,Array是一個(gè)類。
2016-01-09 回復(fù) 有任何疑惑可以回復(fù)我~
查看1條回復(fù)

作為一個(gè)菜鳥,樓上各位大師說的不太懂,所以寫出來自己的理解幫助其他菜鳥理解。如果有錯(cuò),請大神瘋狂地噴吧。正文如下:

arr1.printInfo().setlen(10);

上面的語句連用兩個(gè)點(diǎn)號(hào),第一個(gè)點(diǎn)好理解,即調(diào)用實(shí)例化的對(duì)象arr1里的printInfo函數(shù)。第二個(gè)呢?我們看頭文件中的定義(先寫出來沒有&符號(hào)的):

Array printInfo();

這個(gè)語句呢,相當(dāng)于實(shí)例化Array類的另外一個(gè)對(duì)象名字叫做printInfo()。所以,第二個(gè)點(diǎn)號(hào)后的setlen相當(dāng)于調(diào)用printinfo這個(gè)對(duì)象里的setlen函數(shù)。所以setlen(10)只是對(duì)printinfo中的len值進(jìn)行了改變,并不會(huì)影響到arr1的len值(注意printinfo雖然是實(shí)例化的一個(gè)對(duì)象,但它又是arr1這個(gè)對(duì)象的成員)。修改如下:

Array& printInfo();

這時(shí),返回值為引用類型,即函數(shù)printinfo返回值為一個(gè)對(duì)象的引用,也就是arr1的引用。所以此時(shí)再調(diào)用printinfo的setlen當(dāng)然就會(huì)改變arr1的len值(printinfo成為了arr1的別名)。

自己的理解怪怪的,畢竟作為一個(gè)機(jī)械專業(yè)的學(xué)生。

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

onemoo

確實(shí)理解錯(cuò)了。 ...這個(gè)語句呢,相當(dāng)于實(shí)例化Array類的另外一個(gè)對(duì)象名字叫做printInfo... —— 不不,這不是一個(gè)叫printInfo的Array類。 所有的函數(shù)都有返回類型(就算返回的是void,語法上void也算是類型) Array printInfo() 這是聲明了一個(gè)叫printInfo的函數(shù),其返回類型為Array。 Array& printInfo() 這是聲明了一個(gè)叫printInfo的函數(shù),其返回類型為Array&,即Array引用。
2016-01-09 回復(fù) 有任何疑惑可以回復(fù)我~

&引用之后可以對(duì)該對(duì)象進(jìn)行操作(修改len值等)。Array只是臨時(shí)變量,不能對(duì)原來的對(duì)象進(jìn)行修改。

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
C++遠(yuǎn)征之封裝篇(下)
  • 參與學(xué)習(xí)       70903    人
  • 解答問題       534    個(gè)

封裝--面向?qū)ο笕筇卣髦唬ㄟ^案例讓C++所學(xué)知識(shí)融會(huì)貫通

進(jìn)入課程

為什么要用Array&呀

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)