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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

条款20 :宁以pass-by-reference-to-const 替换pass-by-value

發(fā)布時(shí)間:2025/7/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 条款20 :宁以pass-by-reference-to-const 替换pass-by-value 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

缺省的情況下,C++是以by value方式傳遞對象至函數(shù)。函數(shù)實(shí)參都是以實(shí)際實(shí)參的復(fù)件為初始值,而調(diào)用端獲得的亦是函數(shù)返回值的一個(gè)復(fù)件。這些復(fù)件系由對象的copy構(gòu)造函數(shù)產(chǎn)出,這可能使得pass by value成為昂貴的操作。

?

?????? 考慮下面的繼承體系:

?

classPerson{

public:

??? Person();

??? vitual~Person();

private:

??? std::stringname;

??? std::stringaddress;

};

?

classStudent:publicPerson{

public:

??? Student();

??? virtual~Student();

private:

??? std::stringschoolName;

??? std::stringschoolAddress;

?

};

?

?

?

現(xiàn)在有一個(gè)調(diào)用函數(shù)validateStudent,要調(diào)用一個(gè)Student實(shí)參并返回它是否有效?

boolvalidateStudent(Students);

Studentplato;

boolplatoIsOK=validateStudent(plato);

當(dāng)上述調(diào)用發(fā)生時(shí),會發(fā)生什么事?我們用圖來說明:

????????

?這樣結(jié)束了嗎?也不是這些吧。再看。

我們知道Student類繼承了Person類,而且兩個(gè)類中,都有string類類型的變量。My God

?

如果有一個(gè)方法可以回避這些所有的構(gòu)造函數(shù)與析構(gòu)函數(shù),那就好了。

有的,那就是以pass by reference to const.

boolvalidateStudent(constStudent&s);

注意,采用此種方式,還在以避免對象被切割。

voidprintStudent(Personp){

?????? cout<<schoolaName<<endl;//Error ,

}

Studentplato;

printStudent(plato); //本來想著要打印名字,但是由于對象被切割,會出現(xiàn)問題

?

?

為什么用引用了之后,可以避免被切割?

如果窺視C++底層的話,你就會發(fā)現(xiàn),reference往往是以指針實(shí)現(xiàn)出來的。因此,傳遞過來的指針。

如果你的參數(shù)是一個(gè)內(nèi)置類型,則采用pass by value會比pass by reference to const更加有效率一些。

請記住:

l? 盡量以pass by reference to const替換pass by value。前者通常比較高效,并可避免切割的問題。

l? 以上規(guī)則并不適用于內(nèi)置類型,以及STL的迭代器和函數(shù)對象。對它們而言,pass by value更加適當(dāng)。

轉(zhuǎn)載于:https://www.cnblogs.com/loveyakamoz/archive/2012/11/15/2772408.html

總結(jié)

以上是生活随笔為你收集整理的条款20 :宁以pass-by-reference-to-const 替换pass-by-value的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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