C#的checked和unchecked
2024-10-13 00:56:42
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; }
最新文章
- 【BZOJ-3998】弦论 后缀自动机
- 在webapi2中使用OWIN 自寄宿模式
- Git+Github代码管理控制
- apue第四章学习总结
- 解决win 7&;win xp等系统无法正常用U盘安装或启动
- 由点击页面其它地方隐藏div所想到的jQuery的delegate
- GCC 编译选项
- GridView中的编辑和删除按钮,执行更新和删除代码之前的更新提示或删除提示
- OpenGl绘制螺旋线
- elasticsearch 索引 red 状态恢复 green
- Linux: Check version info
- 使用OpenCV训练好的级联分类器识别人脸
- R语言 启动报错 *** glibc detected *** /usr/lib64/R/bin/exec/R: free(): invalid next size (fast): 0x000000000263a420 *** 错误 解决方案
- 34 char类型转换为int类型
- R语言矩阵栅格显示矩阵颜色显示
- IntelliJ IDEA 2017版 编译器使用学习笔记(八) (图文详尽版);IDE快捷键使用;IDE代码重构(寻找修改痕迹)
- vue 打包后,后缀名为.woff等字体问题不能用解决办法
- C#中货币类型和数值类型、字符串类型的转化
- 解决在ubuntu 12.10安装vmware-tools实现文件共享问题
- “全栈2019”Java第一百一十章:局部内部类与匿名内部类区别详解
热门文章
- node中的Readable - flowing/non-flowing mode
- MM32初识(兼容STM32)
- 【网络流#8】POJ 3469 Dual Core CPU 最小割【ISAP模板】 - 《挑战程序设计竞赛》例题
- Windows Server 2008 R2 搭建FTP服务
- Nopcommerce商城添加【满XX减XX优惠券】功能
- oralce中exists not exists in not in对于NULL的处理
- 汇编笔记之 ret 、retf和call
- Jason 分享吴霁虹教授的产品模型
- 武汉科技大学ACM:1007: 不高兴的津津
- GET——token