一、const 基本功能與用法
const int i = 50; 必須初始化,不可修改。const int j; 編譯錯誤,i = k; 亦錯誤。const A* a:指針指向的內容不可改,但指針本身可指向別處。const A& a:引用綁定的對象不可改。自定義類型傳參建議用 const 引用 避免拷貝開銷;內建類型傳值即可。const,常用於運算符重載,防止 (a*b)=c 這類無意義賦值。const 引用或 const 對象極少用,會限制調用非 const 成員函數。const 指針:內容不可改,只能賦給 const 同類型指針。const 引用的賦值運算符:支援鏈式賦值 a=b=c 但禁止 (a=b)=c。void fun() const; 承諾不修改數據成員,編譯器強制檢查,提升健壯性。非成員函數加 const 無效果。extern const int i; 聲明引用外部常量,extern const int j = 10; 錯誤(不可再次賦值)。二、const 常量與 #define 差異
const 有類型,編譯器檢查;#define 純文本替換,無類型,易產生意外錯誤(如隱式轉型截斷)。const 變量在運行期只有一份拷貝;#define 每次使用都展開成立即數,佔用多份內存。三、進階注意事項
int *p = (int*)&i; *p = 100; 繞過編譯器檢查(未定義行為,慎用)。const int *a / int const *a:指向常量的指針(內容不可改)。int *const a:常量指針(指針本身不可改)。const int *const a:雙重 const。const 對象修改特定成員(如快取、鎖)。掌握 const 的各種語境,能寫出更安全、可維護、效能更優的 C++ 代碼。