頂層const與底層const的區別?
定義與核心區別
頂層?const ?(Top-level?const ) | 底層?const ?(Low-level?const ) | |
---|---|---|
?作用對象 | 變量本身是常量(不可修改) | 變量指向或引用的對象是常量(不可修改) |
?典型場景 | 指針本身不可變、普通變量為常量 | 指針/引用指向的值不可變 |
?是否影響類型 | 不影響類型兼容性(如函數重載) | 影響類型兼容性(如函數重載、類型轉換) |
示例 1:指針中的頂層與底層?const
int a = 10;// 底層 const:指向的值不可變(const 在左側)
const int* p1 = &a; // p1 可指向其他地址,但 *p1 不可修改
p1 = &a; // 合法:修改指針地址
// *p1 = 20; // 非法:底層 const 禁止修改值// 頂層 const:指針本身不可變(const 在右側)
int* const p2 = &a; // p2 不可指向其他地址,但 *p2 可修改
// p2 = &a; // 非法:頂層 const 禁止修改指針地址
*p2 = 20; // 合法:修改指向的值// 雙重 const
const int* const p3 = &a; // 指針和指向的值均不可變
?示例 2:引用中的底層?const
int b = 30;
const int& ref = b; // 底層 const:通過 ref 無法修改 b
// ref = 40; // 非法
b = 40; // 合法:直接修改原始變量