在C 中,基於範圍的循環因其簡單性和可讀性而變得簡單和可讀性而變得簡單廣泛。它們迭代地迭代序列或容器物件的元素。
但是,當嘗試將基於範圍的循環與 std::vector
<code class="cpp">std::vector<int> intVector(10); for(auto& i : intVector) std::cout << i;
將range-for-loops 與std::vector
<code class="cpp">std::vector<bool> boolVector(10); for(auto& i : boolVector) std::cout << i;</code>
錯誤訊息「從'std::_Bit_iterator::reference 類型的右值初始化'std::_Bit_reference&'類型的非常量引用{aka std ::_Bit_reference}'" 表示正在使用右值初始化非常量參考。
理解問題
造成這種差異的原因在於不同的std::vector
解決方案:使用 auto&&&
要解決這個問題,需要使用auto&&&而不是auto&。當提供左值時(例如第一個範例中的 intVector),此習慣用法將正確折疊對左值引用的引用,同時如果提供代理(如 boolVector 的情況),則同時綁定和維護臨時活動。
<code class="cpp">for(auto&& i : boolVector) std::cout << i;</code>
透過採用此技術,您可以有效地迭代 std::vector
以上是為什麼將基於範圍的循環與 std::vector 一起使用會導致編譯器錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!