我希望避免托管C ++(CLI)中的溢出。在C#中有一个未经检查的关键字,并且在C ++溢出中不会以异常结束。
作为参考,未经检查会记录here。基本上如果你这样做:
unchecked
{
int1 = 2147483647 + 10; //this overflows in CLI but is ok in C# and C++
}
在C#中它不会溢出,但通过取最低有效位转换为int。例如,当您计算哈希码时,这是合适的。
注意:我意识到没有等效的C ++关键字,但是一些位移应该可以解决问题;
答案 0 :(得分:3)
您可以在方法周围使用#pragma unmanaged
来获取本机C ++中正常的未经检查的行为。
答案 1 :(得分:2)
使用无符号数据类型进行位操作和校验和。无符号行为的环绕行为在C ++中已经明确定义。