これはコンパイルします
var fourGb = (long)4*1024*1024*1024;
しかし、これは失敗します
var fourGb = 4*1024*1024*1024;
「チェックモードでのコンパイル時に操作がオーバーフローする」と。
では、コンパイラがこれがオーバーフローになることを知っている場合、変数の型が long であるべきだと推論できないのはなぜでしょうか?
これはコンパイルします
var fourGb = (long)4*1024*1024*1024;
しかし、これは失敗します
var fourGb = 4*1024*1024*1024;
「チェックモードでのコンパイル時に操作がオーバーフローする」と。
では、コンパイラがこれがオーバーフローになることを知っている場合、変数の型が long であるべきだと推論できないのはなぜでしょうか?
http://msdn.microsoft.com/en-us/library/ctetwysk%28VS.80%29.aspxを参照してください。
一連の int を乗算するように要求したため、答えは C# 構文によると int です。長くしたい場合は「L」を使用してください。
var fourGb = 4L * 1024 * 1024 * 1024;
計算結果から変数の種類を推測するのは良い考えではないと思います。
その騒ぎを想像してみてください。「しかし、コンパイラは式が長く評価されるべきであることを理解できますが、なぜランタイムはそれを実行できないのでしょうか?」
そして、それは起こらないでしょう、あまりにも高価です.
コンパイラがランタイムと同じ方法で式を評価することが不可欠です。そうでない場合、定数式を編集して定数を変数に置き換えると、突然ランタイム エラーが発生する可能性があります。失敗を診断するのは難しく、非定数式はデフォルトでチェックされていません。
ほとんどの言語で同じです。
その他の動作は、意図しない結果をもたらす可能性があります
間違いなくあなたは :
double varname = 1/2