Rumah >pembangunan bahagian belakang >C++ >Mengapakah `a = b` Berfungsi Semasa `a = a b` Gagal Apabila `a` dan `b` adalah `short` dalam C#?

Mengapakah `a = b` Berfungsi Semasa `a = a b` Gagal Apabila `a` dan `b` adalah `short` dalam C#?

DDD
DDDasal
2025-01-23 08:57:09803semak imbas

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

C# short Aritmetik: Kehalusan

Menambah dua short pembolehubah dalam C# secara langsung, seperti ini:

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

menghasilkan ralat pengkompil. Sebabnya? Jumlah dua nilai short secara tersirat dinaikkan pangkat kepada int. Menugaskan int kepada pembolehubah short memerlukan hantaran eksplisit, yang tiada dalam kod ini.

Anehnya, pengendali penugasan kompaun = berfungsi tanpa ralat:

<code class="language-csharp">a += b; // Works correctly</code>

Kenapa perbezaannya?

Rahsia = Operator

Pengendali = bukan sekadar gula sintaksis; ia adalah ciri bahasa yang direka dengan teliti. Walaupun fungsinya bersamaan dengan a = a b, pengkompil melayannya secara berbeza. Spesifikasi C# menentukan bahawa pengendali penugasan kompaun melakukan penukaran tersirat daripada hasil operasi kepada jenis operan sebelah kiri.

Pada dasarnya, a = b dikendalikan secara tersirat sebagai a = (short)(a b). Pengkompil secara automatik memasukkan cast yang diperlukan ke short, mengelakkan ralat tidak padan jenis.

Pemutus tersirat ini merupakan aspek penting dalam reka bentuk C#. Tanpa itu, banyak operasi aritmetik biasa yang melibatkan jenis integer yang lebih kecil akan memerlukan pemutus eksplisit, menambah kerumitan yang ketara pada kod.

Pendek kata (Pun Niat)

Isu teras ialah promosi jenis tersirat short short kepada int. Pengendali = bijak memintas perkara ini dengan memasukkan lakonan tersirat, menjadikannya cara yang mudah dan cekap untuk melaksanakan operasi aritmetik pada jenis integer yang lebih kecil tanpa penukaran jenis eksplisit.

Atas ialah kandungan terperinci Mengapakah `a = b` Berfungsi Semasa `a = a b` Gagal Apabila `a` dan `b` adalah `short` dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn