C# 預設不檢查算術溢位 (效能考量),但提供關鍵字控制:
checked:啟用檢查,溢位拋 OverflowExceptionunchecked:明確停用檢查,溢位悄悄截尾
int i = 255;
byte b;
b = (byte)i; // 255 (未溢位)
b = unchecked((byte)i); // 255 (同樣)
i++; // 256
b = (byte)i; // 0 (預設 unchecked 環境下截尾)
b = unchecked((byte)i); // 0 (明確 unchecked)
i = 255;
b = checked((byte)i); // 255 (檢查通過)
i++; // 256
b = checked((byte)i); // 拋 OverflowException!
// 區塊範圍內所有算術啟用檢查
checked
{
var x = int.MaxValue + 1; // 拋出
}
// 區塊範圍內明確停用
unchecked
{
var y = int.MaxValue + 1; // -2147483648 (環繞)
}
編譯期常數運算式永遠檢查溢位,不受 `checked`/`unchecked` 影響:
const int x = 2147483647 + 1; // 編譯錯誤 CS0220