const int x = 50;
int* y = (int*)(&x);
*y = 200;
cout << "x: " << x << " address: " << &x << endl;
cout << "*y: " << *y << " address: " << y << endl;
輸出:`x: 50` 、`*y: 200`、**地址相同**。
將 `int` 改為 `float`/`double` 後,`x` 也變為 `200`。
對 `const` 類型變量通過指針進行間接修改,屬於 C++ 未定義行為 (Undefined Behavior, UB)。
與類型無關,屬於 UB 的隨機表現差異。**
volatile int hardwareReg = 0; // 編譯器不優化讀寫
// 編譯器輸出彙編 (gcc -O2 -S)
movl $50, %esi ; 直接用常數 50 作為參數,未讀取內存
leaq .LC0(%rip), %rdi
call _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
; ...
movl $200, (%rax) ; 通過指針修改內存
可見 `x` 的使用被常數 `50` 替換,內存寫入獨立發生。