int y = -2147483648;
int z = unchecked(y / -1);
Run Code Online (Sandbox Code Playgroud)
第二行引起了OverflowException.不应该unchecked阻止这个?
例如:
int y = -2147483648;
int z = unchecked(y * 2);
Run Code Online (Sandbox Code Playgroud)
不会导致例外.
可能重复:
默认情况下,为什么语言不会引发整数溢出错误?
为什么C#默认不使用算术溢出检查?
我认为发生异常通常会更好,这样就不会模糊错误.我知道利用发生的"包装"行为偶尔会有用,但unchecked在这些情况下可以使用关键字来明确意图.
我希望这个决定是故意做出的,也许是为了增加与其他基于C语言的兼容性.
在7.8.3.关于剩余运算符的C#规范,它声明如下:
如果左操作数是最小的int或long值而右操作数是-1,则抛出System.OverflowException.
因此int.MinValue % -1会导致OverflowException.我想知道为什么?