C# 中checked 和unchecked

來源:互聯網
上載者:User

checked和unchecked操作符用於整型算術運算時控制當前環境中的溢出檢查。下列運算參與了checked和unchecked檢查(運算元均為整數):

1)  預定義的++和――一元運算子。

2)  預定義的-一元運算子。

3)  預定義的+、-、×、/等二元操作符。

4)  從一種整型到另一種整型的顯示資料轉換。

當上述整型運算產生一個目標類型無法表示的大數時,可以有相應的處理方式:

(一)使用checked

若運算是常量運算式,則產生編譯錯誤:The operation overflows at complie time in checked mode.

若運算是非常量運算式,則運行時會拋出一個溢出異常:OverFlowException異常

(二)使用unchecked

無論運算是否是常量運算式,都沒有編譯錯誤或是運行時異常發生,只是傳回值被截掉不符合目標類型的高位。

(三)既未使用checked又未使用unchecked

若運算是常量運算式,預設情況下總是進行溢出檢查,同使用checked一樣,會無法通過編譯。

若運算是非常量運算式,則是否進行溢出檢查,取決於外部因素,包括編譯器狀態、執行環境參數等。

下例說明了checked和unchecked操作符在非常量運算式中的使用方法:

class Test

{

       static int x = 1000000;

       static int y = 1000000;

       static int F()

{

       return checked(x*y);     //運行時拋出OverFlowException異常

}

static int G()

{

       return unchecked(x*y);  //截去高位部分,返回-727379968

}

static int H()

{

       return x*y;     //依賴於編譯器的預設設定,一般是不檢查

}

}

checked和unchecked操作符在常量運算式中的使用方法:

class Test

{

       const int x = 1000000;

       const int y = 1000000;

       static int F()

{

       return checked(x*y);     //編譯錯誤,編譯無法通過

}

static int G()

{

       return unchecked(x*y);  //截去高位部分,返回-727379968

}

static int H()

{

       return x*y;     //編譯錯誤,編譯無法通過

}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.