const 在 * 左邊 → 修飾指向的值(不可通過指針修改)
const 在 * 右邊 → 修飾指針本身(指向不可變)
簡記:「左定值,右定向」
int a = 248, b = 4; const int c = 21; // 1. 頂層 const:c 本身不可變 const int *d = &a; // 2. 底層 const:*d 不可變,d 可指向別處 int *const e = &b; // 3. 頂層 const:e 不可變指向,*e 可改 const int *const f = &a; // 4. 雙重 const:指向與值均不可變
| 表達式 | 結果 | 原因 |
|---|---|---|
*c = 32 | ❌ 編譯錯誤 | c 非指針,不可解引用 |
*d = 43 | ❌ 編譯錯誤 | *d 為 const int,不可賦值 |
e = &a | ❌ 編譯錯誤 | e 為 const 指針,不可改變指向 |
f = 0x321f | ❌ 編譯錯誤 | f 為 const 指針,不可賦值 |
d = &b | ✅ 合法 | d 本身非 const,可改指向 |
*e = 34 | ✅ 合法 | *e 非 const,可通過指針修改值 |
const int *p → p is a pointer to a const intint *const p → p is a const pointer to intconst int *const p → p is a const pointer to a const intconst T*,防止誤修改並接受字面值/常量實參。const_iterator。T *const。