为什么C#默认不使用算术溢出检查?

Sam*_*Sam 14 c# math overflow checked

可能重复:
默认情况下,为什么语言不会引发整数溢出错误?

为什么C#默认不使用算术溢出检查?

我认为发生异常通常会更好,这样就不会模糊错误.我知道利用发生的"包装"行为偶尔会有用,但unchecked在这些情况下可以使用关键字来明确意图.

我希望这个决定是故意做出的,也许是为了增加与其他基于C语言的兼容性.

Jep*_*sen 17

C#语言规范说:

对于未由任何checkedunchecked运算符或语句包含的非常量表达式(在运行时计算的表达式),unchecked 除非外部因素(例如编译器开关和执行环境配置)要求进行checked评估,否则缺省溢出检查上下文.

这种选择的原因可能是性能.我同意这个决定导致那些不知道"无声"整数溢出的人之间的错误.

如果您的C#文件属于C#项目文件(*.csproj),那么该文件将保存"默认"溢出检查上下文的配置.要更改它,请参阅在此页面的Visual Studio开发环境设置此编译器选项.

如果您不使用.csproj文件,您可能正在从命令行编译所有内容,然后上面的页面会告诉您使用哪个命令行选项来设置默认溢出检查上下文.