error: invalid initialization of non-const reference of type ‘bool&’ from an rvalue of type ‘std::vector<bool>::reference {aka std::_Bit_reference}’
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[] in vector returns 参考,所以它应该是一个左值,但它不起作用。我应该怎么做才能让它发挥作用?
通常情况下,对于 vector<T>
除了 vector<bool>
之外的所有 vector<T>
都是如此。最初的 C++98 标准将其指定为位压缩向量,因此不可能引用单个元素。
这已被认为是一个不便的错误,但向后兼容性意味着它现在无法更改。
那是因为 std::vector< bool >
不是它看起来的样子。
std::vector
有一个 specialization,类型为 bool
- 它是 space 优化的,每个元素使用一个位。
如果您需要此功能,您可以尝试使用 uint8_t
或类似的东西。或者只是 return bool
,而不是 bool&
.
return由 operator[]
编辑的参考不是标准参考,而是代理 class,这使这里的事情变得复杂。
这里有很多类似的问题:
- Why vector<bool>::reference doesn't return reference to bool?
- Is the use of std::vector<bool> objects in C++ acceptable, or should I use an alternative?
还有其他人。详细了解 std::vector< bool >
专业化。
为什么我会收到错误:从类型为“std::vector::reference {aka std::_Bit_reference}”的右值对类型为“bool&”的非常量引用进行无效初始化?
vector<vector<bool>> vis;
bool& visited(int x, int y)
{
return vis[x][y]; //error
}
据我所知 operator[] in vector returns 参考,所以它应该是一个左值,但它不起作用。我应该怎么做才能让它发挥作用?
通常情况下,对于 vector<T>
除了 vector<bool>
之外的所有 vector<T>
都是如此。最初的 C++98 标准将其指定为位压缩向量,因此不可能引用单个元素。
这已被认为是一个不便的错误,但向后兼容性意味着它现在无法更改。
那是因为 std::vector< bool >
不是它看起来的样子。
std::vector
有一个 specialization,类型为 bool
- 它是 space 优化的,每个元素使用一个位。
如果您需要此功能,您可以尝试使用 uint8_t
或类似的东西。或者只是 return bool
,而不是 bool&
.
return由 operator[]
编辑的参考不是标准参考,而是代理 class,这使这里的事情变得复杂。
这里有很多类似的问题:
- Why vector<bool>::reference doesn't return reference to bool?
- Is the use of std::vector<bool> objects in C++ acceptable, or should I use an alternative?
还有其他人。详细了解 std::vector< bool >
专业化。