const int x = 10; 使 x 不可修改。
三種核心形式:
const int *p / int const *p:指向常量的指針,**指向的值不可改**,指針可改指向。int *const p:常量指針,**指針不可改指向**,指向的值可改。const int *const p:常量指針指向常量,**兩者皆不可改**。const int &ref = x; 綁定後不可通過 ref 修改 x。但 x 本身若非 const 可直接修改。常用於函數參數避免拷貝且防修改。
void func(const int &a, const int &b) { /* 不可修改 a,b */ }
void func(int &a, int &b) { /* 可修改 */ }
const 參數可接受字面值、臨時對象、const/非 const 變量;非 const 參數只能接受非 const 左值。
嘗試修改 const 變量、通過 const 指針/引用修改值、給 const 指針重新賦值,均會導致編譯錯誤。
「const 修飾誰,誰就不可變」。看 const 最近修飾的標識符:在 * 左邊修飾指向值,在 * 右邊修飾指針本身。