Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Tidak Boleh Menggunakan Senarai Pemula di Sebelah Kanan Operator dalam C ?
Senarai Pemula dan Bahagian Kanan Operator
Pertimbangkan coretan kod berikut:
class foo { }; struct bar { template<typename... T> bar(T const&...) { } }; foo& operator<<(foo& f, bar const&) { return f; } int main() { foo baz; baz << {1, -2, "foo", 4, 5}; return 0; }
Penyusun mengadu tentang penggunaan senarai pemula di sebelah kanan (RHS) pengendali <<. Ini menimbulkan persoalan tentang mengapa ini tidak dibenarkan dalam C , berbanding kes di mana senarai pemula digunakan dalam hujah fungsi.
Senarai dan Ungkapan Pemula
Senarai pemula bukan ungkapan seperti yang ditakrifkan dalam Piawaian C. Argumen fungsi dan pengendali secara amnya mestilah ungkapan. Walau bagaimanapun, Standard mentakrifkan pengecualian untuk senarai pemula dalam konteks tertentu, termasuk sebagai argumen fungsi, subskrip dan ungkapan tugasan.
Tiada Pengecualian untuk Operator Binari
Tiada pengecualian untuk senarai pemula untuk digunakan pada RHS (atau sebelah kiri) pengendali binari. Larangan ini berpunca daripada menghuraikan cabaran yang timbul apabila membenarkan senarai pemula sebagai ungkapan. Menggunakan pendakap kerinting untuk kedua-dua senarai pemula dan blok akan membawa kepada kekaburan dalam tatabahasa.
Rasional untuk Sekatan
Cadangan untuk melanjutkan penggunaan senarai pemula kepada ungkapan telah dipertimbangkan pada tahun 2007. Walau bagaimanapun, telah ditentukan bahawa membenarkan senarai pemula sebagai operan sebelah kanan pengendali binari, tetapi tidak sebagai operan kiri, akan menjadi terlalu mengganggu tatabahasa.
Kesimpulan
Senarai pemula tidak boleh digunakan pada RHS pengendali kerana ia tidak ditakrifkan sebagai ungkapan dalam Standard. Walaupun pengecualian tertentu wujud untuk kegunaannya dalam konteks tertentu, membenarkannya sebagai hujah pengendali am akan menimbulkan cabaran penghuraian yang ketara disebabkan penggunaan pendakap kerinting untuk kedua-dua senarai pemula dan blok.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Senarai Pemula di Sebelah Kanan Operator dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!