【问题标题】:In what situations would I specify operation as unchecked?在什么情况下我会将操作指定为未选中?
【发布时间】:2011-11-26 00:16:28
【问题描述】:

例如:

int value = Int32.MaxValue;

unchecked
{
    value += 1;
}

这在哪些方面有用?你能想到什么吗?

【问题讨论】:

  • 需要注意的是unchecked是默认的,所以是多余的,除非你开启checked模式。 The docs 说:checked 关键字用于显式启用整数类型算术运算和转换的溢出检查。默认情况下,[..] 如果表达式包含一个或多个非常量值,编译器不会检测到溢出。

标签: c# math unchecked


【解决方案1】:

在以下情况下使用unchecked

  • 您想通过溢出来表示常量(这在指定位模式时很有用)
  • 您希望算术溢出而不会导致错误

后者在计算哈希码时很有用 - 例如,在Noda Time 中,该项目是使用检查算法构建的,用于除哈希码生成之外的虚拟所有内容。在计算哈希码时,发生溢出是完全正常的,这很好,因为我们并不真正关心结果是 number - 我们只希望它是一个位模式,真的。

这只是一个特别常见的例子,但在其他时候你可能真的很高兴MaxValue + 1 成为MinValue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2015-08-20
    • 1970-01-01
    • 2011-10-16
    • 2020-05-16
    相关资源
    最近更新 更多