指標的 const 位置決定是指標不可變還是內容不可變
JS 裡沒有指標,所以這條完全沒有對應物。在 C++ 裡,
const寫在*的哪一邊,鎖住的是不同的東西。
int a = 10;
int b = 20;
// ① 內容不可變(指向常數的指標,最常用)
const int* p1 = &a;
// *p1 = 30; // ❌ 不能改 a 的值
p1 = &b; // ✅ 可以改指向 b
// ② 指標本身不可變(最接近 JS 的 const variable)
int* const p2 = &a;
*p2 = 30; // ✅ 可以修改 a 的值
// p2 = &b; // ❌ 不能換指別人
// ③ 兩者皆不可變
const int* const p3 = &a;| 寫法 | 鎖住的是 |
|---|---|
const int* p | 指向的內容 |
int* const p | 指標本身 |
const int* const p | 兩者 |
記法:const 管的是它「右邊」那個東西——const 在 * 左邊就管到型別(內容),在 * 右邊就管到指標變數本身。
這條也解釋了為什麼 const 穿不過指標:一個 const 物件裡的 int* p 成員,拿到的是寫法 ②(指標不能換,內容照改),而不是寫法 ③——見 C++ 的 const 是深層不可變,JS 的 const 只防重新賦值。