C++中值传递(pass-by-value)和引用传递(pass-by-reference)
1.pass-by-value的情況:
缺省情況C++以pass-by-value(繼承C的方式)傳遞對(duì)象至(或來自)函數(shù)。函數(shù)參數(shù)都是以實(shí)際參數(shù)的復(fù)件為初值,調(diào)用端所獲得的也是函數(shù)返回值的一個(gè)復(fù)件,復(fù)件由對(duì)象的拷貝構(gòu)造函數(shù)產(chǎn)出,可能使pass-by-value成為耗時(shí)的操作。
?
2.耗時(shí)的原因
類的對(duì)象作為函數(shù)參數(shù)時(shí),如果使用值傳遞,要先拷貝一份實(shí)參的副本,需要調(diào)用類的拷貝構(gòu)造函數(shù),函數(shù)結(jié)束時(shí)副本被銷毀,需要調(diào)用析構(gòu)函數(shù)。如果該類是派生類,調(diào)用的函數(shù)更多,流程更多更復(fù)雜。
拷貝構(gòu)造函數(shù)
拷貝構(gòu)造函數(shù)的調(diào)用:如果一個(gè)新對(duì)象被定義,一定會(huì)有一個(gè)構(gòu)造函數(shù)被調(diào)用,如果沒有新對(duì)象被定義,就不會(huì)有構(gòu)造函數(shù)被調(diào)用。
?
3.pass-by-reference的優(yōu)勢(shì)
①pass-by-reference:沒有任何構(gòu)造函數(shù)或析構(gòu)函數(shù)被調(diào)用,因?yàn)闆]有任何對(duì)象被新建。參數(shù)聲明中加上const,防止傳入的對(duì)象被修改。
②*避免slicing(對(duì)象切割)問題
值傳遞:子類對(duì)象被切割成父類對(duì)象,功能缺失
引用傳遞:解決該問題
?
4.pass-by-reference的底層本質(zhì)
reference往往以指針的形式實(shí)現(xiàn),傳遞的是指針
對(duì)象為內(nèi)置類型(如int),STL的迭代器和函數(shù)對(duì)象,pass-by-value高效一些。
?
5.pass-by-reference的舉例
class A{…};
void action(A a);//值傳遞pass-by-value
void action(const A& a);//引用傳遞pass-by-reference
總結(jié)
以上是生活随笔為你收集整理的C++中值传递(pass-by-value)和引用传递(pass-by-reference)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pass by reference和pa
- 下一篇: s3c2440移植MQTT