在 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中文网其他相关文章!