Dalam C , gelung berasaskan julat telah meluas kerana kesederhanaan dan kebolehbacaannya. Mereka berulang kali ke atas unsur-unsur jujukan atau objek bekas.
Walau bagaimanapun, ketidakkonsistenan yang ingin tahu timbul apabila cuba menggunakan gelung berasaskan julat dengan std::vector
<code class="cpp">std::vector<int> intVector(10); for(auto& i : intVector) std::cout << i;</code>
menggunakan julat-untuk-gelung dengan std::vector
<code class="cpp">std::vector<bool> boolVector(10); for(auto& i : boolVector) std::cout << i;</code>
Mesej ralat "pengamulaan tidak sah rujukan bukan const jenis 'std::_Bit_reference&' daripada nilai r jenis 'std::_Bit_iterator::reference {aka std ::_Bit_reference}'" menunjukkan bahawa rujukan bukan const sedang dimulakan dengan nilai r.
Memahami Isu
Punca percanggahan ini terletak pada perbezaan yang berbeza pelaksanaan std::vector
Penyelesaian: Menggunakan auto&&&
Untuk menyelesaikan isu ini, anda perlu menggunakan auto&&& bukannya auto&. Simpulan bahasa ini akan meruntuhkan rujukan kepada rujukan nilai dengan betul apabila disediakan dengan nilai (seperti intVector dalam contoh pertama), sambil mengikat dan mengekalkan sementara tetap hidup jika proksi disediakan (seperti dalam kes boolVector).
<code class="cpp">for(auto&& i : boolVector) std::cout << i;</code>
Dengan menggunakan teknik ini, anda boleh mengulang std::vector
Atas ialah kandungan terperinci Mengapa Menggunakan Gelung Berasaskan Julat dengan std::vector Menghasilkan Ralat Pengkompil?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!