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 char* p1; // 指向常字符的指針:內容不可改,指針可改 char* const p2; // 常指針:指針不可改,內容可改 const char* const p3; // 雙重常量:指針與內容均不可改
記憶技巧:從右向左讀聲明。char* const p → "p is a const pointer to char"。
void f(const int x) 無意義(副本已隔離),但在函數體內防止誤修改參數。void f(const int* p) 承諾不修改 *p,允許傳入字面量/常量地址。void f(const T& obj) 最常用:避免拷貝、接受臨時對象、承諾不修改。const T& f() 防止 "f() = x" 這類無意義賦值;const T* f() 同理。