首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 型別轉換進階:溢位檢查與 checked/unchecked 區塊

     編輯:關於C語言

溢位檢查機制

C# 預設不檢查算術溢位 (效能考量),但提供關鍵字控制:

  • checked:啟用檢查,溢位拋 OverflowException
  • unchecked:明確停用檢查,溢位悄悄截尾

程式碼範例


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+`:全專案啟用溢位檢查
  • Visual Studio:專案屬性 → Build → Advanced → "Check for arithmetic overflow/underflow"
  • 建議:除非效能極度敏感,否則開啟專案層級檢查,並在極少數需環繞的區塊用 `unchecked`

常數運算式

編譯期常數運算式永遠檢查溢位,不受 `checked`/`unchecked` 影響:


const int x = 2147483647 + 1; // 編譯錯誤 CS0220
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved