代碼:
const int a = 10;
int *p = (int *)(&a); // 編譯通過(但運行時未定義行為)
int *p = &a; // 編譯錯誤:cannot convert from 'const int *' to 'int *'
&a 類型為 const int*,承諾不通過該指針修改 a。int* 會丟失 const 資格,編譯器禁止**隱式轉換**,防止程序員誤修改常量。(int*) 告訴編譯器「我知道我在幹什麼」,繞過檢查,**但運行時修改 *p 導致未定義行為**(可能崩潰、可能靜默失效、可能看似成功)。const 是契約,防止意外修改只讀內存(如字符串常量區、.rdata 段)。const 變量值直接內聯到機器碼,不分配內存。const int* 承諾只讀,調用者放心傳遞非常量對象(隱式轉換安全),反之則不安全。const 對象。const,或復制一份非常量副本。const T*,輸出參數用 T*。