关于在C#程序中使用checked、unchecked和不使用检测的异同
MSDN解释:
checked 关键字用于对整型算术运算和转换显式启用溢出检查;
unchecked 关键字用于取消整型算术运算和转换的溢出检查。
使用它们究竟有何效果,先看以下代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int number1 = 2100000;
int number2 = 2300000;
//int number3 = number1 * number2;//(1)
//int number3=unchecked(number1*number2);//(2)
//int number3=checked(number1*number2);//(3)
// int number3=unchecked(2100000*2300000);//(4)
int number3 = 2300000 * 2100000;//(5)
}
}
}
在运行(1)、(2)是均不会产生异常,在运行行(3)时会抛出溢出异常,也就是说checked操作符可以有效地检测数据运算的溢出,但是使用unchecked和不使用任何的检测控制又有什么异同呢?
请继续运行行(4)和行(5)就能看出它们的区别了,运行行(4)时仍然不会有异常,但是行(5),在编译时就无法通过,因为在编译时系统已经知道运算的结果溢出。