【发布时间】: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 移出 :)
-
你的问题是错误的,你肯定没有保留最重要的位。不过,并没有真正解释反对意见。