【问题标题】:What is the C++ equivalent of the C# checked检查的 C# 的 C++ 等价物是什么
【发布时间】:2013-01-24 11:44:44
【问题描述】:

我希望避免托管 C++ (CLI) 中的溢出。在 C# 中有一个未经检查的关键字,在 C++ 中溢出不会导致异常。

作为参考,未选中记录在here。基本上如果你这样做:

unchecked
{
      int1 = 2147483647 + 10; //this overflows in CLI but is ok in C# and C++
}

在 C# 中,它不会溢出,而是通过获取最低有效位转换为 int。例如,当您计算哈希码时,这是合适的。

注意:我意识到没有等效的 C++ 关键字,但一些位移应该可以解决问题;

【问题讨论】:

  • unchecked 是默认行为(除非被编译器覆盖)。
  • 在托管 C++ (CLI) 中,您将遇到溢出异常。我正在编辑问题。
  • 您可以随时使用#pragma unmanaged 在本机 C++ 中获得正常的未经检查的行为。
  • @leppie - 实际上听起来是个不错的答案 - 您可以将其从 cmets 移出 :)
  • 你的问题是错误的,你肯定没有保留最重要的位。不过,并没有真正解释反对意见。

标签: c# c++-cli overflow


【解决方案1】:

您可以在方法周围使用#pragma unmanaged 来获得本机 C++ 中正常的未经检查的行为。

【讨论】:

    【解决方案2】:

    使用无符号数据类型进行位运算和校验和。无符号行为的环绕行为在 C++ 中定义良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 2011-01-19
      • 2010-12-07
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多