繁体   English   中英

错误:从类型&#39;std :: vector的右值对类型&#39;bool&&#39;的非常量引用进行了无效的初始化 <bool> :: reference {aka std :: _ Bit_reference}&#39;

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM