Rumah >pembangunan bahagian belakang >C++ >Mengapakah `vector v(istream_iterator(cin), istream_iterator());` Mengisytiharkan Fungsi dalam C ?

Mengapakah `vector v(istream_iterator(cin), istream_iterator());` Mengisytiharkan Fungsi dalam C ?

Susan Sarandon
Susan Sarandonasal
2024-12-23 14:54:24401semak imbas

Why Does `vector v(istream_iterator(cin), istream_iterator());` Declare a Function in C  ?

Kes Membingungkan Penghalau Sementara dalam Penghuraian Paling Menjengkelkan

Penghuraian Paling Menjengkelkan, kekaburan penghuraian yang terkenal dalam C , menimbulkan kebingungan soalan: bagaimana baris berikut boleh ditafsirkan sebagai fungsi pengisytiharan?

vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());

Untuk memahami tingkah laku pelik ini, kita mesti menyelidiki butiran Parse Paling Menjengkelkan. Lelaran sementara kedua sememangnya boleh ditafsirkan sebagai jenis, iaitu fungsi yang menghasilkan lelaran tanpa parameter. Walau bagaimanapun, intinya terletak pada pemahaman tafsiran lelaran sementara pertama.

Berbeza dengan lelaran kedua, lelaran sementara pertama kelihatan mengelirukan dibungkus dalam kurungan dan tidak mempunyai nama parameter yang jelas. Sintaks tidak konvensional ini, warisan C, mencetuskan pertanyaan: apakah jenis yang diwakili oleh iterator ini?

Jawapannya ialah istream_iterator(cin) pada asasnya bersamaan dengan istream_iterator cin. Tanda kurung tidak mempunyai tujuan yang bermakna dan hanya berlebihan. Sintaks yang ingin tahu ini membolehkan anda sewenang-wenangnya melampirkan nama argumen dalam kurungan dalam pengisytiharan fungsi.

Akhirnya, sifat membingungkan kod ini berpunca daripada pergantungan pada sintaks usang ini. Ia mengisytiharkan bahawa parameter pertama ialah istream_iterator bernama cin. Tingkah laku yang tidak dijangka ini menggariskan kelemahan peninggalan sintaksis sedemikian, yang berpotensi membawa kepada kekeliruan dan kesamaran dalam kod.

Atas ialah kandungan terperinci Mengapakah `vector v(istream_iterator(cin), istream_iterator());` Mengisytiharkan Fungsi 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