![](/img/trans.png)
[英]error: cannot bind non-const lvalue reference of type ‘bool&’ to an rvalue of type ‘bool’
[英]error: invalid initialization of non-const reference of type ‘bool&’ from an rvalue of type ‘std::vector<bool>::reference {aka std::_Bit_reference}’
为什么会出现错误:从类型'std :: vector :: reference {aka std :: _ Bit_reference}'的右值对类型'bool&'的非常量引用进行无效的初始化?
vector<vector<bool>> vis;
bool& visited(int x, int y)
{
return vis[x][y]; //error
}
据我所知,向量中的operator []返回引用,因此它应该是左值,但是不起作用。 我应该怎么做才能使其正常工作?
那是因为std::vector< bool >
不是它的样子。
类型为bool
std::vector
有一个特殊化 -空间经过了优化,每个元素只使用一位。
如果需要此功能,可以尝试使用uint8_t
或类似的方法。 或者只返回bool
,而不是bool&
。
由operator[]
返回的引用不是标准引用,而是代理类,这使这里的事情变得复杂。
这里有很多类似的问题:
和别的。 阅读有关std::vector< bool >
专业化的更多信息。
通常,您假设的是这种情况,实际上除了vector<bool>
之外的任何vector<T>
vector<bool>
。 最初的C ++ 98标准将其指定为位打包向量,因此不可能引用各个元素。
从那以后,这被认为是一个不便的错误,但是向后兼容意味着它现在不能更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.