ホームページ > バックエンド開発 > C++ > C# で `a` と `b` が `short` の場合、`a = b` は機能するのに `a = a b` は失敗するのはなぜですか?

C# で `a` と `b` が `short` の場合、`a = b` は機能するのに `a = a b` は失敗するのはなぜですか?

DDD
リリース: 2025-01-23 08:57:09
オリジナル
783 人が閲覧しました

Why Does `a  = b` Work While `a = a   b` Fails When `a` and `b` are `short` in C#?

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 に昇格されます。 intshort 変数に割り当てるには明示的なキャストが必要ですが、このコードにはありません。

驚くべきことに、複合代入演算子 = はエラーなしで動作します。

<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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート