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

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

Barbara Streisand
Lepaskan: 2024-12-13 21:17:12
asal
429 orang telah melayarinya

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

Senarai Pemula dan Bahagian Kanan Operator

Pertimbangkan coretan kod berikut:

class foo { };

struct bar
{
    template<typename... T>
    bar(T const&amp;...) { }
};

foo&amp; operator<<(foo&amp; f, bar const&amp;) { return f; }

int main()
{
    foo baz;
    baz << {1, -2, "foo", 4, 5};

    return 0;
}
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan