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
Lepaskan: 2025-01-23 08:57:09
asal
741 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan