C# checked和unchecked运算符
1、作用
checked和unchecked运算符用于CLR(公共语言运行时)强制对它们所作用的代码块,进行(不进行)代码溢出检测
2、示例说明
有代码如下:
static void Main(string[] args) { byte b = 255; b++; Console.WriteLine(b.ToString()); }
byte数据类型只能包含0~255的数,所以递增的值就会发生溢出。CLR如何处理这个溢出,取决于许多因素,包括编译器选项,很多时候可能会得不到我们的想要的溢出报错。
So,C#提供了checked关键字,就是用来干这个的,如果把一个可能存在溢出的代码块标记为checked,CLR就会执行溢出检查,如果发生溢出,就抛出OverflowExceprion异常.修改上面的代码:
byte b = 255; checked { b++; } Console.WriteLine(b.ToString());
ok,CLR抛出了OverflowExceprion异常.
那么unchecked关键字的作用,禁止CLR进行溢出检测,代码如下:
byte b = 255; unchecked { b++; } Console.WriteLine(b.ToString());
在本例中,不会抛出异常,但会丢失数据,因为byte的数据类型不能包含256,溢出的位会丢失,所以b变量得到的值是0;
注:unchecked是默认行为,只有在checked的代码块中有需要不进行检查的代码,才显示的使用unchecked。