5

このコードをVSで記述した場合、機能しません( "'int'を'short'に暗黙的に変換できません。明示的な変換が存在します。キャストがありませんか?"):

short A = 5;
short B = 1 << A;

しかし、このコードは絶対に問題ありません。

short A = 1 << 5;

式全体を短くキャストすることでエラーを解消できることはわかっていますが、なぜこれが発生するのか誰かに教えてもらえますか?

4

2 に答える 2

5

Aはリテラルではないため、コンパイラは結果が。として表現可能であることを認識しませんshort。したがって、明示的なキャストが必要です。リテラル5を使用すると、コンパイラーは結果が32であることを確認します。これは、に収まりshortます。

于 2012-10-19T23:13:16.287 に答える
2

C#言語仕様4.0は6.1.9で次のように述べています。

int型の定数式(§7.18)は、定数式の値が宛先型の範囲内であれば、sbyte、byte、short、ushort、uint、またはulong型に変換できます。

定数式の変換は、これが暗黙的に行われる特殊なケースの1つです(6.1)。

于 2012-10-19T23:18:17.767 に答える