Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Tidak Boleh Menggunakan Senarai Pemula di Sebelah Kanan Operator C?

Mengapa Saya Tidak Boleh Menggunakan Senarai Pemula di Sebelah Kanan Operator C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-09 01:19:13700semak imbas

Why Can't I Use Initializer Lists on the Right-Hand Side of C   Operators?

Senarai Pemuatan Terlebih Operator dan Pemula pada RHS

Dalam pengaturcaraan C, senarai pemula ialah sintaks ringkas untuk memulakan objek agregat dengan senarai ungkapan . Walaupun senarai pemula boleh digunakan dengan mudah dalam pelbagai senario, penggunaannya di sebelah kanan (RHS) pengendali telah menjadi titik perbincangan.

Mengapa Senarai Pemula Dibataskan pada RHS

C 11 tidak membenarkan senarai pemula pada RHS pengendali, termasuk pengendali binari << digunakan dalam kod anda. Terdapat beberapa sebab untuk sekatan ini:

  • Senarai Pemula Bukan Ungkapan: Menurut standard C, senarai pemula tidak dianggap sebagai ungkapan. Argumen operator binari lazimnya adalah ungkapan dan tatabahasa yang ditakrifkan untuk ungkapan tidak termasuk senarai pemula.
  • Cabaran Penghurai: Membenarkan senarai pemula di sebelah kiri (LHS) pengendali menimbulkan cabaran tatabahasa . Tatabahasa standard untuk ungkapan boleh menjadi samar-samar jika ia membenarkan senarai pemula dalam kedua-dua kedudukan LHS dan RHS.

Pengecualian untuk Senarai Pemula

Walaupun terdapat sekatan umum pada menggunakan senarai pemula dalam hujah operator, C mentakrifkan pengecualian khusus di mana senarai pemula diterima:

  • Sebagai hujah kepada fungsi
  • Sebagai subskrip dalam ekspresi akses tatasusunan
  • Sebagai hujah kepada pembina
  • Sebagai penyataan balasan
  • Sebagai pemula dalam definisi berubah

Dalam kod anda, anda boleh menggunakan senarai pemula sebagai hujah kepada pembina bar, yang dipanggil dalam << pengendali:

foo baz;
baz << bar{1, -2, "foo", 4, 5}; // Legal

Sebab Sekatan

Keputusan untuk menyekat senarai pemula pada RHS pengendali berpunca daripada keinginan untuk mengekalkan tatabahasa yang konsisten dan jelas. Membenarkan senarai pemula dalam semua konteks akan memperkenalkan kerumitan tambahan dan potensi kekaburan dalam bahasa.

Seperti yang dinyatakan dalam kertas perbincangan yang disebut dalam soalan anda, alternatif untuk membenarkan senarai pemula pada RHS tetapi bukan LHS telah dipertimbangkan terlalu bermasalah. Oleh itu, pendekatan konservatif untuk membenarkan senarai pemula hanya dalam konteks tertentu telah dipilih.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Senarai Pemula di Sebelah Kanan Operator 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