Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah `istream_iterator(cin)` Boleh Ditafsirkan sebagai Jenis dalam 'Paling Menjengkelkan'?

Bagaimanakah `istream_iterator(cin)` Boleh Ditafsirkan sebagai Jenis dalam 'Paling Menjengkelkan'?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-17 01:51:24911semak imbas

How Can `istream_iterator(cin)` Be Interpreted as a Type in the

Kekaburan Kurungan dalam Perisytiharan Fungsi

Dalam fenomena "Most Vexing Parse", kesamaran timbul apabila menggunakan templat. Satu contoh sedemikian berlaku apabila menghurai pengisytiharan fungsi. Pertimbangkan baris berikut:

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

Baris ini boleh ditafsirkan sebagai sama ada pengisytiharan fungsi atau pengisytiharan pembolehubah. Persoalannya, bagaimanakah lelaran sementara pertama boleh ditafsirkan sebagai jenis?

Bertentangan dengan gerak hati, istream_iterator(cin) bukan pengisytiharan fungsi. Sebaliknya, ia adalah ungkapan yang mencipta contoh sementara istream_iterator dimulakan dengan aliran input cin. Tanda kurung yang berlebihan di sekeliling cin tidak mengubah tafsiran ini.

Sintaks pelik ini diwarisi daripada C, di mana tanda kurungan sedemikian juga dianggap sebagai satu kesilapan. Dalam kes ini, kurungan tidak menjejaskan makna ungkapan. Ia hanya berfungsi sebagai bunyi yang tidak perlu, yang membawa kepada kekeliruan.

Kesimpulannya, lelaran sementara pertama dalam baris yang diberikan mewakili jenis istream_iterator, dan tanda kurungan di sekeliling cin adalah berlebihan. Walau bagaimanapun, sintaks yang samar-samar ini harus digunakan dengan berhati-hati untuk mengelakkan kemungkinan salah faham.

Atas ialah kandungan terperinci Bagaimanakah `istream_iterator(cin)` Boleh Ditafsirkan sebagai Jenis dalam 'Paling Menjengkelkan'?. 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