推荐答案
在 C# 中,checked 和 unchecked 关键字用于控制整数算术运算和转换的溢出检查。
checked:当使用checked关键字时,如果算术运算或转换导致溢出,程序将抛出System.OverflowException异常。unchecked:当使用unchecked关键字时,即使算术运算或转换导致溢出,程序也不会抛出异常,而是继续执行并返回截断后的结果。
本题详细解读
checked 关键字
checked 关键字用于显式启用溢出检查。当在 checked 块中执行整数算术运算或转换时,如果结果超出了目标数据类型的范围,程序将抛出 System.OverflowException 异常。
// www.javascriptcn.com code example
int max = int.MaxValue;
try
{
int result = checked(max + 1); // 抛出 OverflowException
}
catch (OverflowException ex)
{
Console.WriteLine("溢出发生: " + ex.Message);
}unchecked 关键字
unchecked 关键字用于显式禁用溢出检查。当在 unchecked 块中执行整数算术运算或转换时,即使结果超出了目标数据类型的范围,程序也不会抛出异常,而是返回截断后的结果。
int max = int.MaxValue; int result = unchecked(max + 1); // 不会抛出异常,结果为 int.MinValue Console.WriteLine(result); // 输出: -2147483648
默认行为
在 C# 中,默认情况下,编译器的溢出检查行为取决于项目的编译设置。如果启用了 /checked+ 编译器选项,则默认启用溢出检查;如果启用了 /checked- 编译器选项,则默认禁用溢出检查。
使用场景
checked:适用于需要确保数据完整性和安全性的场景,例如金融计算或关键业务逻辑。unchecked:适用于性能敏感的场景,或者当你知道溢出不会导致问题时,例如位操作或某些算法实现。
总结
checked 和 unchecked 关键字提供了对整数算术运算和转换的溢出检查的细粒度控制。通过合理使用这两个关键字,可以在保证程序正确性的同时,优化性能。