C# - ここでオーバーフロー チェックが発生する原因は何ですか?
-
22-09-2019 - |
質問
私は、言語仕様 (§7.5.12) に記載されているように、C# がオーバーフロー チェックを実行しないことに慣れています。
チェックまたはチェックされていない演算子やステートメントで囲まれていない非定数式 (実行時に評価される式) の場合、外部要因 (コンパイラ スイッチや実行環境構成など) によってオーバーフロー チェック コンテキストが要求されない限り、デフォルトのオーバーフロー チェック コンテキストはチェックされません。評価を確認しました。
低レベルのコードで配列の境界チェックを行うときにこれを利用しました。
if ((uint)index >= (uint)TotalCount)
...
Index が負の場合、TotalCount を超えるほど大きな正の数になることが期待されます。しかし、驚いたことに、負の数を指定すると OverflowException が発生するため、式を unchecked() でラップする必要があります。Visual Studio でプロジェクト オプションを確認しましたが、オーバーフロー チェックを有効または無効にするオプションが見つかりません。では、なぜここにあるのでしょうか?
解決
プロジェクト内にあるはずです。
- 「プロパティ」フォルダをダブルクリックします。
- 「ビルド」タブ。
- 「詳細...」をクリックします。ボタン。
- 「算術オーバーフロー/アンダーフローをチェックする」のチェックを外します。
所属していません StackOverflow