为什么我会收到错误:'std :: vector :: reference {aka std :: _ Bit_reference}'类型的右值的'bool&'类型的非const引用的无效初始化?
vector<vector<bool>> vis;
bool& visited(int x, int y)
{
return vis[x][y]; //error
}
据我所知,vector中的operator []返回引用,所以它应该是一个左值,但它不起作用。我该怎么做才能让它发挥作用?
答案 0 :(得分:13)
那是因为std::vector< bool >
不是它的样子。
对于std::vector
类型为bool
的专门化 - 它是空间优化的,并为每个元素使用一个位。
如果您需要此功能,可以尝试使用uint8_t
或类似的内容。或者只返回bool
,而不是bool&
。
operator[]
返回的引用不是标准引用,而是代理类,这会使这里的内容变得复杂。
这里有很多类似的问题:
等等。阅读有关std::vector< bool >
专业化的更多信息。
答案 1 :(得分:6)
通常情况下,除了vector<T>
之外,还有vector<bool>
字样的情况。最初的C ++ 98标准将其指定为位打包向量,因此不可能对单个元素进行引用。
此后被认为是一个不方便的错误,但向后兼容性意味着它现在无法改变。