可能重复:
为什么语言默认情况下不会在整数溢出上引发错误?
为什么C#默认不使用算术溢出检查?
我认为发生异常通常会更好,这样就不会模糊错误。我知道利用发生的'包装'行为偶尔会有用,但是 unchecked
可以在这些情况下使用关键字来明确意图。
我希望这个决定是故意做出的,也许是为了增加与其他基于C语言的兼容性。
可能重复:
为什么语言默认情况下不会在整数溢出上引发错误?
为什么C#默认不使用算术溢出检查?
我认为发生异常通常会更好,这样就不会模糊错误。我知道利用发生的'包装'行为偶尔会有用,但是 unchecked
可以在这些情况下使用关键字来明确意图。
我希望这个决定是故意做出的,也许是为了增加与其他基于C语言的兼容性。
C#语言规范说:
对于非常量表达式(在。处计算的表达式) 任何未包含的运行时)
checked
要么unchecked
运营商 或语句,默认溢出检查上下文是unchecked
除非外部因素(例如编译器切换和执行 环境配置)呼吁checked
评价。
这种选择的原因可能是性能。我同意这个决定导致那些不知道“无声”整数溢出的人之间的错误。
如果您的C#文件属于C#项目文件(*.csproj
),然后该文件保存“默认”溢出检查上下文的配置。要改变它,请参阅 在Visual Studio开发环境中设置此编译器选项 在 这一页。
如果你不使用 .csproj
您可能正在从命令行编译所有内容,然后上面的页面会告诉您使用哪个命令行选项来设置默认的溢出检查上下文。
在这里查看我对类似问题的回答: 在C#中处理整数溢出的最佳方法是什么?
...有一个C#编译器选项,用于定义表达式之外的方式 处理已检查和未选中:/已检查。
默认行为适用于大多数应用程序。对于其他应用程序,其中严格检查应该是缺省值,有一个编译器选项来启用此类行为。