C#的checked和unchecked
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; }
C#的checked和unchecked的更多相关文章
- Java异常之checked与unchecked
首先,java的异常分为Error和Exception.这两类都是接口Throwable的子类.Error及Exception及其子类之间的关系,大致可以用下图简述. 注意事项: 1. Error仅在 ...
- C# checked和unchecked详解
1.对基元类型执行的许多算术运算都可能造成溢出,有如下代码: Byte b=100; b=(Byte)(b+200); 简单的解读上面的代码: 第一步,将所有的操作数都扩大至32位或者64位(根据操作 ...
- c# 使用checked和unchecked
首先要知道int型在c#中是一个32位的数.由此可以知道int型的取值范围是(-2147483648~2147483647)当要使用int的最小值或者是最大值的时候,可以使用int.MinValue和 ...
- Checked Exception & Unchecked Exception
查Spring事务管理时看到一句话: Spring使用声明式事务处理,默认情况下,如果被注解的数据库操作方法中发生了unchecked异常,所有的数据库操作将rollback:如果发生的异常是chec ...
- C# checked和unchecked运算符
1.作用 checked和unchecked运算符用于CLR(公共语言运行时)强制对它们所作用的代码块,进行(不进行)代码溢出检测 2.示例说明 有代码如下: static void Main(str ...
- checked 和 unchecked 基元类型操作
对基元类型执行的许多算术运算都可能造成溢出: Byte b = ; b = (Byte) (b + ); // b 现在包含 44(或者十六进制值 2C) 重要提示:执行上述算术运算时,第一步要求所有 ...
- C# checked和unchecked 关键字详解
checked 和 unchecked关键字用来限定检查或者不检查数学运算溢出的:如果使用了checked发生数学运算溢出时会抛出OverflowException:如果使用了unchecked则不会 ...
- 使用checked和unchecked来对整数溢出进行检测和忽略
在C#中,整数int32的取值为-2147483648~2147473647(可以通过int.MaxValue和int.MinValue获得)当超出这个范围后,编译器不会进行检查,仍然会进行运算,但得 ...
- C#基础之checked与 unchecked的使用
C#基础之checked与 unchecked的使用 以上都是C#中的两个关键字的使用.据官网给出的相关介绍是:C# 语句既可以在已检查的上下文中执行,也可以在未检查的上下文中执行. 在已检查的上下文 ...
- Checked 和 UnChecked 异常 的使用场合
异常的概念 任何的异常都是Throwable类(为何不是接口??),并且在它之下包含两个子类Error / Exception,而Error仅在当在Java虚拟机中发生动态连接失败或其它的定位失败的 ...
随机推荐
- java.lang.UnsatisfiedLinkError: Native method not found 三种可能解决方案
so文件编译生成后,运行时,有时候会遇到java.lang.UnsatisfiedLinkError: Native method not found问题,有可能是以下三种因素: 一.Jni方法头部大 ...
- [Javascript] What is JavaScript Function Currying?
Currying is a core concept of functional programming and a useful tool for any developer's toolbelt. ...
- 使用CButtonColumn自定义CGridiew里面的按钮
参考 http://www.yiiwiki.com/post/8 使用yii做的项目,编辑的时候,使用到的是自带的 CButtonColumn , 现在需要在编辑的时候跳新页面,这时只需要这样做就可以 ...
- Java设计模式---装饰模式
装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任.换言之,客户 ...
- Linux随笔
列表:ls -l(显示详细属性)long -a(显示全部文件包括隐藏文件)all -h(字节转换) -d(显示当前目录本身不显示目录下) -i(显示I节点) df -h 人性化查看磁盘占用率 serv ...
- 零基础学习云计算及大数据DBA集群架构师【Linux Bash Shell编程及系统自动化2015年1月21日周四】
lvy老师教项目课程,以及代课了shell部分课程,大家都觉得这位老师不行,上课时做的操作很多都是错误的,觉得她基础不好.而且,她不能解释原因,学生问为什么,她不知道.崩溃啊.向xx培训机构反应后,说 ...
- Android Studio 安装
准备: JDK 7以及以上版本. Android Studio安装文件 中文站下载 http://www.android-studio.org/index.php/download exe ,包含S ...
- ASP.NET-FineUI开发实践-2
FineUI好处之一在于No JS,这里的No JS并不是不使用JS,JS对于ASP.Net是必不可少的,只是FineUI把大部分JS封装,如果想用,后台提供了很多方法返回JS,Get...Refer ...
- java多线程心得
多并发的时候,在什么情况下必须加锁?如果不加锁会产生什么样的后果. 加锁的场景跟java的new thread和Runnable的关系是什么? 看看java的concurrentMap源码. 还有sp ...
- 如何清理多余的Windows桌面右键菜单
删除多余的发送到选项 Win7使用一段时间后,我们可能会装很多软件,这时候右键菜单可能会变得很长,特别是“发送到(Send to)”里面的选项,有时候我们卸载软件之后在右键发送到菜单里还会有残存的选项 ...