【发布时间】:2020-09-10 07:22:11
【问题描述】:
所以基本上我有一个包含布尔值(真、假)的 std::vector 容器,我需要一个运算符 [],但是当我返回具有正确索引的值(布尔)时,它给了我像这样的错误: 无法将“bool&”类型的非常量左值引用绑定到“bool”类型的右值|
我的运算符如下所示:
bool& operator[] ( unsigned int idx) {
typename std::vector<bool>::iterator retval;
for (typename std::vector<std::vector<bool> *>::iterator it = data.begin(); it != data.end(); ++it) {
for (typename std::vector<bool>::iterator cont_it = (*it)->begin(); cont_it != (*it)->end(); ++cont_it) {
if (idx == 0) {
retval = cont_it;
}
idx--;
}
}
return *retval;
}
以及出现错误的调用:
ivb[0] = false;
ivb[1] = true;
【问题讨论】:
-
不幸的是
std::vector<bool>是 special。一种特殊的方式是您不能取消引用std::vector<bool>::iterator并获得bool&。我想你应该有类似struct bool_wrapper { bool value; }的东西,然后你可以使用std::vector<bool_wrapper>代替。 -
用
auto代替typename std::vector<std::vector<bool>*>::iterator怎么样?
标签: c++ boolean return-value