首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 函數參數傳遞:const 引用 vs 非 const 引用 vs 值傳遞

     編輯:程式設計綜合問答

核心概念

C++ 函數調用時,參數傳遞方式決定了形參與實參的關係及效能開銷:

傳遞方式語法記憶體行為適用場景
值傳遞void f(T x)拷貝構造函數建立副本,佔用棧空間基本型別、小型物件、需修改副本不影響原值
引用傳遞void f(T& x)形參綁定實參記憶體地址,無拷貝開銷需修改實參、大型物件避免拷貝
const 引用void f(const T& x)同引用,但編譯器強制只讀大型物件只讀訪問、接受臨時物件/字面值

關鍵差異解析

  • 非 const 引用:不拷貝實參,直接別名綁定。但不能綁定臨時物件(如字面值、表達式結果),編譯報錯。
  • const 引用:同樣不拷貝,且可綁定臨時物件(延長其生命週期至函數結束),通用性最強。
  • 何時發生拷貝:僅值傳遞會觸發拷貝構造;引用(無論 const)僅傳遞地址(指針大小),無物件拷貝。

最佳實踐建議

  1. 輸入參數優先用 const T&,兼顧效能與通用性。
  2. 需修改實參用 T&。
  3. 基本型別(int、double 等)直接值傳遞,開銷極小且語義清晰。
  4. C++11 起可配合 T&&(右值引用)實現移動語義,進一步優化資源轉移。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved