Rumah > pembangunan bahagian belakang > C++ > Mengapakah Saya Tidak Boleh Menggunakan `auto&` dengan `std::vector` dalam Julat-untuk-Gelung?

Mengapakah Saya Tidak Boleh Menggunakan `auto&` dengan `std::vector` dalam Julat-untuk-Gelung?

Barbara Streisand
Lepaskan: 2024-10-27 05:28:03
asal
657 orang telah melayarinya

Why Can't I Use `auto&` with `std::vector` in a Range-for-Loop?

Julat-untuk-Gelung dengan std::vector

Dalam C , julat-untuk-gelung biasanya digunakan untuk mengulang atas bekas STL. Walau bagaimanapun, seseorang mungkin menghadapi ralat semasa cuba menggunakan pendekatan ini dengan std::vector.

Pertimbangkan coretan kod berikut:

<code class="cpp">std::vector<int> intVector(10);
for(auto& i : intVector)
    std::cout << i;</code>
Salin selepas log masuk

Kod ini berfungsi kerana std: :vektor ialah bekas dengan iterator yang tidak merujuk kepada int&. Ini bermakna kita boleh mengikat nilai penyahrujukan lelaran kepada auto rujukan lnilai kita sendiri&.

Namun, jika kita cuba melakukan operasi yang sama dengan std::vector, kita akan menghadapi ralat serupa dengan:

<code class="cpp">std::vector<bool> boolVector(10);
for(auto& i : boolVector)
    std::cout << i;</code>
Salin selepas log masuk

Ini kerana std::vector bukan bekas dalam erti kata tradisional tetapi lebih kepada bitset. Ia menyimpan nilai boolean dalam cara yang padat, menggunakan integer untuk mewakili berbilang boolean. Akibatnya, iteratornya mengembalikan objek Proksi dan bukannya bool&.

Proksi ialah objek sementara yang tidak boleh terikat pada rujukan lnilai. Inilah sebabnya kami tidak boleh menggunakan auto& dalam julat-untuk-gelung di atas. Sebaliknya, kita perlu menggunakan auto&&, yang akan mengikat dengan betul rujukan nilai jika diberikan atau mengekalkan Proksi sementara hidup jika ia diberi proksi. Berikut ialah kod yang diperbetulkan:

<code class="cpp">for(auto&& i : boolVector)
    std::cout << i;</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapakah Saya Tidak Boleh Menggunakan `auto&` dengan `std::vector` dalam Julat-untuk-Gelung?. 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