傳引用和傳值的區別和物件切割問題(二)

2022-06-25 17:48:11 字數 797 閱讀 5483

reference往往以指標的形式實現出來,因此,pass by reference你可以看成是傳指標

而pass by value 就會拷貝乙份臨時的資料或者說物件

對於內建型別 int double 效率上肯定是pass by value效率更高

所以在stl中,很多時候都是pass by value

那什麼時候用pass by reference呢?

答案是,除了之前的情況,大部分時候都要用pass by reference

pass by value 還面臨著物件切割的問題

void function(a a)

class a

class b:public a

物件切割slicing 就是傳乙個子類b的物件b作為引數

但是在函式中呼叫

b.display();
的時候,會呼叫類a的display而不是類b的

因為function的引數是a 而b以pass by value 傳進來就會被切割

總結一下

一般而言,適用與pass by value的情況有以下三個 內建型別 stl的迭代器 函式物件

其他的盡量用pass by reference

1.盡量用pass by reference 替代 pass by value 前者更高效並且可避免物件切割問題

2.以上規則不適用與內建型別、stl的迭代器 、函式物件,對於這三者而言,pass by value更恰當

傳值和傳引用的區別

大家都用過sqlhelper,在sqlhelper類中定義一些資料庫助手函式 通過分析某函式中呼叫 關閉連線 函式和 關閉cmd命令 函式後,是否可以關閉連線和cmd命令來分析傳值和傳引用的區別 請注意看 中被框注的部分 分析 在executedataset 引數 函式的最後呼叫closeconn ...

傳值和傳引用 傳指標的區別

傳值,是把實參的值賦值給行參,那麼對行參的修改,不會影響實參的值 傳位址,是傳值的一種特殊方式,只是他傳遞的是位址,不是普通的如 int,那麼傳位址以後,實參和行參都 指向同乙個物件 傳引用,真正的以位址的方式傳遞引數,傳遞以後,行參和實參 都是同乙個物件 只是他們名字不同而已,對行參的修改將影響實...

傳值 傳指標和傳引用的區別

傳值 void myswap int a,int b 傳指標 1 void myswap int a,int b 2 void myswap int a,int b 引用傳遞 void myswap int a,int b 函式傳值 傳值實際上是在子函式的棧裡面重新開闢乙個空間儲存傳進來的實參引數值...