C++中值傳遞(pass-by-value)和引用傳遞(pass-by-reference)


1.pass-by-value的情況:

缺省情況C++以pass-by-value(繼承C的方式)傳遞對象至(或來自)函數。函數參數都是以實際參數的復件為初值,調用端所獲得的也是函數返回值的一個復件,復件由對象的拷貝構造函數產出,可能使pass-by-value成為耗時的操作。

 

2.耗時的原因

類的對象作為函數參數時,如果使用值傳遞,要先拷貝一份實參的副本,需要調用類的拷貝構造函數,函數結束時副本被銷毀,需要調用析構函數。如果該類是派生類,調用的函數更多,流程更多更復雜。

拷貝構造函數

拷貝構造函數的調用:如果一個新對象被定義,一定會有一個構造函數被調用,如果沒有新對象被定義,就不會有構造函數被調用。

 

3.pass-by-reference的優勢

①pass-by-reference:沒有任何構造函數或析構函數被調用,因為沒有任何對象被新建。參數聲明中加上const,防止傳入的對象被修改。

②*避免slicing(對象切割)問題

值傳遞:子類對象被切割成父類對象,功能缺失

引用傳遞:解決該問題

 

4.pass-by-reference的底層本質

reference往往以指針的形式實現,傳遞的是指針

對象為內置類型(如int),STL的迭代器和函數對象,pass-by-value高效一些。

 

5.pass-by-reference的舉例

class A{…};

void action(A a);//值傳遞pass-by-value

void action(const A& a);//引用傳遞pass-by-reference

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM