C#中的checked、unchecked設(shè)置符
發(fā)表時(shí)間:2024-06-12 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]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ò)
}
}