C# short
算術演算: 微妙
次のように、C# で 2 つの short
変数を直接追加します。
<code class="language-csharp">short a, b; a = 10; b = 10; a = a + b; // Error: Cannot implicitly convert type 'int' to 'short'</code>
はコンパイラ エラーを生成します。 理由? 2 つの short
値の合計は、暗黙的に int
に昇格されます。 int
を short
変数に割り当てるには明示的なキャストが必要ですが、このコードにはありません。
驚くべきことに、複合代入演算子 =
はエラーなしで動作します。
<code class="language-csharp">a += b; // Works correctly</code>
なぜ違いがあるのですか?
=
オペレーターの秘密
=
演算子は単なる構文上の砂糖ではありません。これは慎重に設計された言語機能です。 機能的には a = a b
と同等ですが、コンパイラーはそれを異なる方法で扱います。 C# 仕様では、複合代入演算子が演算結果から左側のオペランドの型への暗黙的な変換を実行することが規定されています。
本質的に、a = b
は暗黙的に a = (short)(a b)
として処理されます。コンパイラは、必要なキャストを short
に自動的に挿入し、型の不一致エラーを防ぎます。
この暗黙的なキャストは、C# の設計の重要な側面です。 これがないと、より小さい整数型を含む一般的な算術演算の多くで明示的なキャストが必要となり、コードが大幅に複雑になります。
要するに (駄洒落のつもりです)
中心的な問題は、short short
から int
への暗黙的な型昇格です。 =
演算子は、暗黙的なキャストを組み込むことでこれを巧みに回避し、明示的な型変換を行わずに、より小さい整数型で算術演算を実行する便利で効率的な方法となります。
以上がC# で `a` と `b` が `short` の場合、`a = b` は機能するのに `a = a b` は失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。