1

言語仕様に記載されているように、私はC#がオーバーフローチェックを実行しないことに慣れています(§7.5.12)。

チェックされた、またはチェックされていない演算子またはステートメントで囲まれていない非定数式(実行時に評価される式)の場合、外部要因(コンパイラスイッチや実行環境構成など)が要求しない限り、デフォルトのオーバーフローチェックコンテキストはチェックされません。評価を確認しました。

低レベルのコードで配列境界チェックを行うときに、これを利用しました。

if ((uint)index >= (uint)TotalCount)
    ...

インデックスが負の場合、TotalCountを超えるように大きな正の数になると思います。ただし、驚いたことに、負の数を指定するとOverflowExceptionが発生するため、式をunchecked()でラップする必要があります。Visual Studioでプロジェクトオプションを確認しましたが、オーバーフローチェックを有効または無効にするオプションが表示されません。では、なぜここにあるのでしょうか?

4

1 に答える 1

7

プロジェクトに含まれている必要があります。

  1. プロパティフォルダをダブルクリックします。
  2. [ビルド]タブ。
  3. [詳細...]ボタンをクリックします。
  4. 「算術オーバーフロー/アンダーフローのチェック」のチェックを外します。
于 2010-02-24T18:50:12.863 に答える