c#默认不就是不检测溢出吗?还要uncheck干什么?

解决方案 »

  1.   

    1:在编译中可以调整为默认检测嘛;
    2:我猜测一下check
    {...这里很长uncheck()
    {
     ..这里很短或者确定不需要检测
    }}
    这种情况也是有可能的只是我不知道这种代码它空间是否会检测,没测试过。
      

  2.   

    默认的运算符号+的IL指令是不检查溢出的 add指令
     
    使用check以后,就会使用检查溢出的IL指令 addovf  好像是这样写,记的不太清楚了,其他几个操作符一样
      

  3.   

    正如你所说,C#默认是不检查溢出的,为什么需要这个关键字,我们可以探讨一下:
    1.有uncheck关键字,没有check关键字,你不绝对别扭吗?这是成对出现的
    2.如果一个程序多数地方需要检查溢出,我们可能在项目的属性的设置检查溢出(不是用check,是设置项目属性)
    而在这个程序的极少数地方,我们不想检查溢出,那是不是就有了uncheck的用武之地呢?
      

  4.   

    一般的best practice建议debug build检查溢出,而release build不检查。这样在debug阶段你可以确定哪些溢出是不需要检查的,然后用unchecked段把这些代码圈起来。应该说很多溢出都是有害的,所以尽可能要在debug阶段找出来解决掉。而之所以release build设为不检查,只是为了防止你的程序运行时影响到最终用户。因此请检查你的代码,处理所有你能够处理的溢出吧。CLR via C#一书有相关的章节详细介绍这个。