Rumah >
Artikel > pembangunan bahagian belakang > Mengapakah Menggunakan Range-Based Untuk Gelung Dengan std::vector
Menyebabkan Ralat dalam C ? " />
Dalam C , berasaskan julat untuk gelung menyediakan cara yang mudah untuk lelaran melalui elemen dalam bekas. Walau bagaimanapun, tingkah laku tertentu mungkin kelihatan mengejutkan apabila digunakan dengan bekas nilai boolean.
Pertimbangkan kod berikut:
<code class="cpp">std::vector<int> intVector(10); for (auto& i : intVector) std::cout << i; std::vector<bool> boolVector(10); for (auto& i : boolVector) std::cout << i;</code>
Gelung pertama berjaya berulang melalui intVector dan mencetak elemen integer. Walau bagaimanapun, gelung kedua menghasilkan ralat berikut:
error: invalid initialization of non-const reference of type ‘std::_Bit_reference&’ from an rvalue of type ‘std::_Bit_iterator::reference {aka std::_Bit_reference}’ for (auto& i : boolVector)
Ralat ini berlaku kerana std::vector
<code class="cpp">for (auto&& i : boolVector) std::cout << i;</code>Dengan menggunakan auto&&, pengkompil akan runtuh dengan betul menjadi rujukan nilai jika diberi rujukan nilai boolean sebenar atau mengikat dan mengekalkan proksi sementara jika diberi rujukan kepada proksi.
Atas ialah kandungan terperinci Mengapakah Menggunakan Range-Based Untuk Gelung Dengan std::vector