c#默认不就是不检测溢出吗?还要uncheck干什么?
c#默认不就是不检测溢出吗?还要uncheck干什么?
------解决方案--------------------1:在编译中可以调整为默认检测嘛;
2:我猜测一下
check
{
...这里很长
uncheck()
{
..这里很短或者确定不需要检测
}
}
这种情况也是有可能的只是我不知道这种代码它空间是否会检测,没测试过。
------解决方案--------------------默认的运算符号+的IL指令是不检查溢出的 add指令
使用check以后,就会使用检查溢出的IL指令 addovf 好像是这样写,记的不太清楚了,其他几个操作符一样
------解决方案--------------------正如你所说,C#默认是不检查溢出的,为什么需要这个关键字,我们可以探讨一下:
1.有uncheck关键字,没有check关键字,你不绝对别扭吗?这是成对出现的
2.如果一个程序多数地方需要检查溢出,我们可能在项目的属性的设置检查溢出(不是用check,是设置项目属性)
而在这个程序的极少数地方,我们不想检查溢出,那是不是就有了uncheck的用武之地呢?
------解决方案--------------------编译器也可以设置为检验溢出
但其中一部分不想检验,就可以使用
------解决方案--------------------一般的best practice建议debug build检查溢出,而release build不检查。这样在debug阶段你可以确定哪些溢出是不需要检查的,然后用unchecked段把这些代码圈起来。
应该说很多溢出都是有害的,所以尽可能要在debug阶段找出来解决掉。而之所以release build设为不检查,只是为了防止你的程序运行时影响到最终用户。因此请检查你的代码,处理所有你能够处理的溢出吧。
CLR via C#一书有相关的章节详细介绍这个。