C#的 checked关键字用于对整型算术运算和转换显式启用溢出检查。

简单点说,我们在进行数值计算时,运算结果可能会超出该类型能表达的数值范围,因而结果溢出。而这个溢出如果是含有变量的表达式的话,编译器默认是不会检查的(见第三段代码),为什么不检查,因为溢出检查比较耗时。可是我们在实际应用中,可能会遇到计算结果不能溢出的情况,因而我们可以使用checked块标记这段代码,然后运行时一旦发生溢出,这里会抛出异常,从而我们可以对其采取相应的解决方法。

unchecked关键字则阻止溢出检查。注意这里说的是不检查溢出,而不是检查了不抛出异常。详细可以点链接查看msdn文档。至于为啥会有unchecked存在的必要,还是那句,因为检查溢出比较耗时,所以当无溢出危险时,使用不检查的代码可以提高性能。但是,如果可能发生溢出,则应使用检查环境。

我在学习这段时,遇到的问题是写了unchecked和什么都不写有什么区别,对于代码段3来说,确实没有区别。但是对于代码段1、2,就能看出区别了,代码段1在vs2013里面会有红线,编译出错,而代码段2就没问题。貌似对于直接能看出来的溢出编译器还是能发现的,所以我上面说了含有变量的表达式。

//1. 这句编译器在编译时会报错,因为值溢出了
Console.WriteLine(int.MaxValue + 1); //2. 下面这样就不会报错,正常运行,输出溢出的值
unchecked { Console.WriteLine(int.MaxValue + 1); } //3. 这里的结果会溢出,但编译器检查不到,会正常运行,输出溢出的值
int n = int.MaxValue;
n += 1; //4. 加上checked,这样在编译后,运行时一旦溢出就会引发System.OverflowException异常。
int n = int.MaxValue;
checked { n += 1; }

  

最新文章

  1. 【BZOJ-3998】弦论 后缀自动机
  2. 在webapi2中使用OWIN 自寄宿模式
  3. Git+Github代码管理控制
  4. apue第四章学习总结
  5. 解决win 7&win xp等系统无法正常用U盘安装或启动
  6. 由点击页面其它地方隐藏div所想到的jQuery的delegate
  7. GCC 编译选项
  8. GridView中的编辑和删除按钮,执行更新和删除代码之前的更新提示或删除提示
  9. OpenGl绘制螺旋线
  10. elasticsearch 索引 red 状态恢复 green
  11. Linux: Check version info
  12. 使用OpenCV训练好的级联分类器识别人脸
  13. R语言 启动报错 *** glibc detected *** /usr/lib64/R/bin/exec/R: free(): invalid next size (fast): 0x000000000263a420 *** 错误 解决方案
  14. 34 char类型转换为int类型
  15. R语言矩阵栅格显示矩阵颜色显示
  16. IntelliJ IDEA 2017版 编译器使用学习笔记(八) (图文详尽版);IDE快捷键使用;IDE代码重构(寻找修改痕迹)
  17. vue 打包后,后缀名为.woff等字体问题不能用解决办法
  18. C#中货币类型和数值类型、字符串类型的转化
  19. 解决在ubuntu 12.10安装vmware-tools实现文件共享问题
  20. “全栈2019”Java第一百一十章:局部内部类与匿名内部类区别详解

热门文章

  1. node中的Readable - flowing/non-flowing mode
  2. MM32初识(兼容STM32)
  3. 【网络流#8】POJ 3469 Dual Core CPU 最小割【ISAP模板】 - 《挑战程序设计竞赛》例题
  4. Windows Server 2008 R2 搭建FTP服务
  5. Nopcommerce商城添加【满XX减XX优惠券】功能
  6. oralce中exists not exists in not in对于NULL的处理
  7. 汇编笔记之 ret 、retf和call
  8. Jason 分享吴霁虹教授的产品模型
  9. 武汉科技大学ACM:1007: 不高兴的津津
  10. GET——token