資(zī)訊

精準傳達 • 有效溝通

從品牌網站建設到網絡營銷策劃,從策略到執行的一(yī)站式服務

C++ 中(zhōng)的值傳遞和引用傳遞

來源:公司資(zī)訊 | 2021.08.18

本文主要介紹C++中(zhōng)的值傳遞(pass-by-value)和引用傳遞(pass-by-reference)的區别。

1 pass-by-value

在 C++ 裏面,一(yī)個函數在使用參數時,如果使用 pass-by-value 方式,那麽編譯系統會在調用該函數的地方,把實參複制一(yī)份傳給函數的形參。

用法示例:int FunA(string strTest);

這種做法有以下(xià)幾個問題:

第一(yī),如果在函數裏修改傳給函數的參數值,實際上我(wǒ)們修改的隻是實參的副本,而在調用函數的位置,這個實參值本身沒有改變;

第二,此過程中(zhōng)進行的副本拷貝動作會耗費(fèi)系統的資(zī)源,如果拷貝的參數是比較複雜(zá)的 struct 或者 class 等類型,複制出一(yī)份副本的成本(時空開(kāi)銷)很大(dà);

2 pass-by-reference

在 C++ 裏面,一(yī)個函數在使用參數時,如果使用 pass-by-reference 方式,那麽編譯系統會在調用該函數的地方,直接将實參的内存地址(指針)傳給形參。

用法示例:int FunA(string & strTest);

這種做法有以下(xià)幾點好處:

第一(yī),由于函數的參數傳遞的是把實參的地址拷貝給形參,因此形參和實參對應的是同一(yī)塊内存地址,所以對形參的修改自然會反映到實參上;

第二,在 C++ 中(zhōng),指針(内存地址)是一(yī)個 int 類型,所以即使在 64 位系統中(zhōng),指針的複制成本(8字節)也是完全可以接受的;

第三,因爲 C++ 規定引用不能爲空,所以在函數中(zhōng)傳進來引用可以直接使用,而如果傳進來的是指針類型(實際上是值傳遞、引用傳遞之外(wài)的指針傳遞方式),那麽還需要先判斷指針是否爲空,易用性不強。

3 總結

綜合對比上述兩種函數參數的值傳遞方式,可以看出在C++中(zhōng),一(yī)般情況下(xià)都會優先使用“引用傳遞”。

例如:

int FunA(const string strTest)  // 值傳遞

{

    // some codes

}

 

int FunB(const string & strTest)    // 引用傳遞,這裏加了const關鍵字,爲常引用。優選

{

    // some codes

}

————————————————

版權聲明:本文爲CSDN博主「liitdar」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/liitdar/article/details/85982561

 

—— 靈通雲微信公衆号 ——

熱門标簽

上一(yī)條———————

下(xià)一(yī)條———————

十七年 建站經驗

多一(yī)份參考,總有益處

聯系靈通雲,免費(fèi)獲得專屬《策劃方案》及報價

咨詢相關問題或預約面談,可以通過以下(xià)方式與我(wǒ)們聯系

業務熱線:400-688-6062 / 大(dà)客戶專線   南(nán)通:15818561755