Mar*_*ela 8 c++ stl vector rvalue lvalue
为什么我会得到错误:从'std :: vector :: reference {aka std :: _ Bit_reference}'类型的右值开始无效初始化类型'bool&'的非const引用?
vector<vector<bool>> vis;
bool& visited(int x, int y)
{
return vis[x][y]; //error
}
Run Code Online (Sandbox Code Playgroud)
据我所知,vector中的operator []返回引用,所以它应该是一个左值,但它不起作用.我该怎么做才能让它发挥作用?
Kir*_*rov 13
那是因为std::vector< bool >它不是它的样子.
对于类型有一个专门化 - 它的空间优化,并为每个元素使用一个位.std::vectorbool
uint8_t如果您需要此功能,可以尝试使用或类似的东西.或者只是回来bool,而不是bool&.
返回的引用operator[]不是标准引用,而是代理类,这使得此处的内容变得复杂.
这里有很多类似的问题:
和别的.阅读有关std::vector< bool >专业化的更多信息
通常情况下,你所假设的是这种情况,vector<T> 除了字面上的任何情况vector<bool>.最初的C++ 98标准将其指定为位打包向量,因此不可能对单个元素进行引用.
这已被认为是一个不方便的错误,但向后兼容意味着它现在无法改变.
| 归档时间: |
|
| 查看次数: |
3084 次 |
| 最近记录: |