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 short
到int
的隱式類型提升。 =
運算子透過合併隱式強制轉換巧妙地規避了這一點,使其成為無需顯式類型轉換即可對較小整數類型執行算術運算的便捷且高效的方法。
以上是為什麼在 C# 中,當「a」和「b」為「short」時,「a = b」可以工作,而「a = a b」則失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!