首頁 > 後端開發 > 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#中加入兩個short變量,如下圖所示:

<code class="language-csharp">short a, b;
a = 10;
b = 10;
a = a + b; // Error: Cannot implicitly convert type 'int' to 'short'</code>
登入後複製

產生編譯器錯誤。 原因是什麼? 兩個 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 shortint的隱式類型提升。 = 運算子透過合併隱式強制轉換巧妙地規避了這一點,使其成為無需顯式類型轉換即可對較小整數類型執行算術運算的便捷且高效的方法。

以上是為什麼在 C# 中,當「a」和「b」為「short」時,「a = b」可以工作,而「a = a b」則失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板