gpt4 book ai didi

c++ - Range-for-loops 和 std::vector

转载 作者:IT老高 更新时间:2023-10-28 12:36:08 26 4
gpt4 key购买 nike

为什么这段代码有效

std::vector<int> intVector(10);
for(auto& i : intVector)
std::cout << i;

这不是吗?

std::vector<bool> boolVector(10);
for(auto& i : boolVector)
std::cout << i;

在后一种情况下,我得到一个错误

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)

最佳答案

因为 std::vector<bool> is not a container !

std::vector<T> 的迭代器通常取消对 T& 的引用,您可以将其绑定(bind)到自己的 auto&

然而,

std::vector<bool> 将其 bool 打包在整数中,因此您需要一个代理来在访问它们时进行位掩码。因此,它的迭代器返回一个 Proxy
而且由于返回的 Proxy 是一个纯右值(一个临时值),它不能绑定(bind)到一个左值引用,例如 auto&

解决方案:使用 auto&& ,如果给定一个左值引用,它将正确折叠成一个左值引用,或者如果给定一个代理,则绑定(bind)并保持临时事件。

关于c++ - Range-for-loops 和 std::vector<bool>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34079390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com