4

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

作为参考,此处记录了 unchecked 。基本上,如果你这样做:

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

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

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

4

2 回答 2

3

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

于 2013-01-24T12:14:52.120 回答
2

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

于 2013-01-25T05:02:42.417 回答