C++中与C# checked相对应的是什么?

4

我希望避免在托管C++(CLI)中发生溢出。在C#中有unchecked关键字,在C++中溢出不会导致异常。

参考此处的文档,如果执行以下操作:

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

在C#中,它不会溢出而是通过取最低有效位将其转换为int。例如,计算哈希码时,这是合适的。
注意:我意识到在C++中没有等效的关键字,但是一些位移操作可以解决问题。

“unchecked” 是默认行为(除非被编译器覆盖)。 - leppie
1
你可以随时使用 #pragma unmanaged 来获取本机 C++ 中正常的未检查行为。 - leppie
@Mat - 很好的观点,我编辑了问题,谢谢! - Bogdan Gavril MSFT
1
你的问题是错误的,你肯定没有保留最重要的位。虽然这并不能完全解释投票下降。 - Ben Voigt
修正 - 我的意思是最低有效位而不是最高有效位,谢谢。 - Bogdan Gavril MSFT
显示剩余2条评论
2个回答

3

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


2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接