首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ const 關鍵字完全指南:六大用法、函數參數、指針陷阱與最佳實踐

     編輯:C++ 入門

C++ const 關鍵字完全指南:六大用法、指針陷阱與最佳實踐

const 是 C++ 中「只讀」語義的核心,正確使用能提高代碼安全性、可維護性並助優化。本文系統總結六大分類用法、指針聲明陷阱、函數參數應用與常見誤區。

六大核心用法分類

分類語法形式含義
常變量const Type var / Type const var值不可修改,編譯期常量傳播優化
常引用const Type& ref綁定對象不可通過此引用修改,可綁定臨時對象
常對象Class const obj只能調用 const 成員函數,非 const 成員不可訪問
常成員函數Type func() const不修改對象狀態(除 mutable 成員),const 對象只能調用此類函數
常數組Type const arr[N]元素不可修改
常指針見下文詳解指針本身或指向內容不可修改

指針 const 陷阱:誰被修飾?

口訣:const 在 * 左 → 指向內容常量;const 在 * 右 → 指針本身常量。

const char* p1;       // 指向常字符的指針:內容不可改,指針可改
char* const p2;       // 常指針:指針不可改,內容可改
const char* const p3; // 雙重常量:指針與內容均不可改

記憶技巧:從右向左讀聲明。char* const p → "p is a const pointer to char"。

函數參數中 const 最佳實踐

  • 值傳遞:void f(const int x) 無意義(副本已隔離),但在函數體內防止誤修改參數。
  • 指針傳遞:void f(const int* p) 承諾不修改 *p,允許傳入字面量/常量地址。
  • 引用傳遞:void f(const T& obj) 最常用:避免拷貝、接受臨時對象、承諾不修改。
  • 返回值:const T& f() 防止 "f() = x" 這類無意義賦值;const T* f() 同理。

常見誤區與建議

  1. 構造函數不能是 const:構造時在初始化對象。
  2. 靜態成員函數不能是 const:無 this 指針。
  3. const 對象只能調用 const 成員函數:編譯器強制檢查。
  4. mutable 關鍵字:允許 const 成員函數修改特定成員(如緩存、鎖)。
  5. 盡可能加 const:語義明確、編譯器優化、防止誤修改。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved