【发布时间】:2011-01-22 18:13:02
【问题描述】:
我们什么时候必须在 C# 中使用 checked 运算符?
是不是只适合异常处理?
【问题讨论】:
我们什么时候必须在 C# 中使用 checked 运算符?
是不是只适合异常处理?
【问题讨论】:
您可以使用 checked 来防止表达式中的(静默)溢出。
当您知道可能会发生无害的溢出时,请使用unchecked。
您在不想依赖默认(项目范围)编译器设置的地方同时使用这两种设置。
这两种形式都很少见,但在进行关键整数运算时,值得考虑可能的溢出。
还要注意它们有两种形式:
x = unchecked(x + 1); // ( expression )
unchecked { x = x + 1;} // { statement(s) }
【讨论】:
checked 将帮助您获取 System.OverFlowException,否则会被忽视
int result = checked (1000000 * 10000000);
// Error: operation > overflows at compile time
int result = unchecked (1000000 * 10000000);
// No problems, compiles fine
【讨论】:
来自The checked and unchecked operators
checked 和 unchecked 运算符 用于控制溢出 检查整型的上下文 算术运算和转换。
在检查的上下文中,如果一个表达式 产生一个超出范围的值 目标类型的范围, 结果取决于是否 表达式是常数或 非恒定的。常量表达式 导致编译时错误,而 评估非常量表达式 在运行时并引发异常。
在未经检查的上下文中,如果 表达式产生的值是 在目的地范围之外 类型,结果被截断。
【讨论】:
checked 与 unchecked 在您进行整数数学运算时也很有用。特别是递增操作,您知道您将递增超过UInt32.MaxValue,并希望它无害地溢出回0。
【讨论】: