2017-04-03 9 views
0

:OverflowExceptionがをスローする算術、鋳造、または変換動作についてはVB.NETがデフォルトでOverflowExceptionをスローするのはなぜですか? MSDNから

、操作がチェックコンテキストで発生しなければなりません。既定では、Visual Basicでの算術演算とオーバーフローがチェックされます。 C#では、そうではありません。チェックされていないコンテキストで操作が発生した場合、その結果は、宛先タイプに適合しない上位ビットを破棄することによって切り捨てられます。

デフォルトでは、C#とF#はパフォーマンスのために算術オーバーフロー/アンダーフローをチェックしません。しかし、なぜVB.NETはそれらをデフォルトとしてチェックしますか?

+7

"言語設計者はこれがデフォルトであるべきだと思ったから" - それはかなり始まりと終わりです。予期しない結果対性能の競合する利益の間で異なる決定/妥協をしただけです。 –

+1

「デフォルトテンプレート」からの設定...(拡張ビルド設定)が必要な場合は変更できますが、そのポイントは何ですか?チェックを外したくない場合は... – Codexer

+2

[C#ではなくVB.netでのみ[OverflowExceptionの重複]が発生する可能性があります(http://stackoverflow.com/questions/36311162/overflowexception-only-in-vb- net-not-in-c-sharp) – Neolisk

答えて

1

正直言って、あるレベルの低い言語の要求のように意図しないオーバーフローが発生しないように、設計に勤勉でなければなりません。たぶんC#では、もしあなたがオーバーローインしているとすれば、意図的にハッシュコードの生成をしたいと思っていて、あなた自身があなたを信用していなければ、チェックされた機能があります。さらに、チェックされた状態でネストするのが煩わしい場合は、コンパイラ設定を変更して常にアクティブにして、VB環境をエミュレートすることができます。

関連する問題