可能是因为我整晚都没睡觉......但是有人可以解释一下为什么第一个操作符[](常量)在MSVC 2010中生成一个警告,说我正在返回一个临时变量的地址,并且第二个运算符[](非常量运算符)产生一个编译器错误,指出:'return':无法从'std :: _ Vb_reference <_Alloc>'转换为'bool&'?!?!?
非常感谢每个人都会浪费时间在我的问题上 .
class ReqAtts
{
public:
const bool& operator[](size_t ii) const
{
return _atts[ii];
}
bool& operator[](size_t ii)
{
return _atts[ii];
}
private:
std::vector<bool> _atts;
};
2 回答
std::vector<bool>
在大多数实现中是节省空间的(g,MSVC):每个项目可以存储为单个位,而不是bool . 你可以在这里阅读更多:en.cppreference.com你有2个选择:
使用
std::vector<unsigned char>
(或其他整数类型)而不是std::vector<bool>
.使用
std::vector<bool>::reference
作为operator[]
的返回类型,如下所示:将参数att更改为ii,它将起作用