明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

C#中的checked、unchecked設(shè)置符

[摘要]1) 預(yù)定義的++和――一元運(yùn)算符。2) 預(yù)定義的-一元運(yùn)算符。3) 預(yù)定義的+、-、×、/等二元操作符。4) 從一種整型到另一種整型的顯示數(shù)據(jù)轉(zhuǎn)換。當(dāng)上述整型運(yùn)算產(chǎn)生一個(gè)目標(biāo)類型無(wú)法表示的大數(shù)時(shí),可以有相應(yīng)的處理方式:(一)使用checked若運(yùn)算是常量表達(dá)式,則產(chǎn)生編譯錯(cuò)誤:...
1)  預(yù)定義的++和――一元運(yùn)算符。
2)  預(yù)定義的-一元運(yùn)算符。
3)  預(yù)定義的+、-、×、/等二元操作符。
4)  從一種整型到另一種整型的顯示數(shù)據(jù)轉(zhuǎn)換。
當(dāng)上述整型運(yùn)算產(chǎn)生一個(gè)目標(biāo)類型無(wú)法表示的大數(shù)時(shí),可以有相應(yīng)的處理方式:
(一)使用checked
若運(yùn)算是常量表達(dá)式,則產(chǎn)生編譯錯(cuò)誤:The operation overflows at complie time in checked mode.
若運(yùn)算是非常量表達(dá)式,則運(yùn)行時(shí)會(huì)拋出一個(gè)溢出異常:OverFlowException異常
(二)使用unchecked
無(wú)論運(yùn)算是否是常量表達(dá)式,都沒(méi)有編譯錯(cuò)誤或是運(yùn)行時(shí)異常發(fā)生,只是返回值被截掉不符合目標(biāo)類型的高位。
(三)既未使用checked又未使用unchecked
若運(yùn)算是常量表達(dá)式,默認(rèn)情況下總是進(jìn)行溢出檢查,同使用checked一樣,會(huì)無(wú)法通過(guò)編譯。
若運(yùn)算是非常量表達(dá)式,則是否進(jìn)行溢出檢查,取決于外部因素,包括編譯器狀態(tài)、執(zhí)行環(huán)境參數(shù)等。
下例說(shuō)明了checked和unchecked操作符在非常量表達(dá)式中的使用方法:
class Test
{
       static int x = 1000000;
       static int y = 1000000;
       static int F()
{
       return checked(x*y);     //運(yùn)行時(shí)拋出OverFlowException異常
}
static int G()
{
       return unchecked(x*y);  //截去高位部分,返回-727379968
}
static int H()
{
       return x*y;     //依賴于編譯器的默認(rèn)設(shè)置,一般是不檢查
}
}
checked和unchecked操作符在常量表達(dá)式中的使用方法:
class Test
{
       const int x = 1000000;
       const int y = 1000000;
       static int F()
{
       return checked(x*y);     //編譯錯(cuò)誤,編譯無(wú)法通過(guò)
}
static int G()
{
       return unchecked(x*y);  //截去高位部分,返回-727379968
}
static int H()
{
       return x*y;     //編譯錯(cuò)誤,編譯無(wú)法通過(guò)
}
}