3

これはコンパイルします

var fourGb = (long)4*1024*1024*1024;

しかし、これは失敗します

var fourGb = 4*1024*1024*1024;

「チェックモードでのコンパイル時に操作がオーバーフローする」と。

では、コンパイラがこれがオーバーフローになることを知っている場合、変数の型が long であるべきだと推論できないのはなぜでしょうか?

4

4 に答える 4

4

http://msdn.microsoft.com/en-us/library/ctetwysk%28VS.80%29.aspxを参照してください。

一連の int を乗算するように要求したため、答えは C# 構文によると int です。長くしたい場合は「L」を使用してください。

var fourGb = 4L * 1024 * 1024 * 1024;
于 2010-07-21T04:52:48.300 に答える
2

計算結果から変数の種類を推測するのは良い考えではないと思います。

于 2010-07-21T20:04:48.333 に答える
2

その騒ぎを想像してみてください。「しかし、コンパイラは式が長く評価されるべきであることを理解できますが、なぜランタイムはそれを実行できないのでしょうか?」

そして、それは起こらないでしょう、あまりにも高価です.

コンパイラがランタイムと同じ方法で式を評価することが不可欠です。そうでない場合、定数式を編集して定数を変数に置き換えると、突然ランタイム エラーが発生する可能性があります。失敗を診断するのは難しく、非定数式はデフォルトでチェックされていません。

于 2010-07-21T04:52:35.067 に答える
0

ほとんどの言語で同じです。

  • 式のデータ型は優先順位規則に従います
  • 割り当て時に「var」データ型にキャストされます

その他の動作は、意図しない結果をもたらす可能性があります

間違いなくあなたは :

于 2010-07-21T05:01:47.600 に答える