可能是因为我整夜没睡...但是有人可以解释一下为什么第一个运算符[](const one)在MSVC 2010中生成警告,说我要返回一个临时变量的地址,并且第二个operator [](非const运算符)产生编译器错误,指出:'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;
};
std::vector<bool>
在大多数实现中(g ++,MSVC)是节省空间的:每个项目都可以存储为一个位,而不是布尔值。您可以在此处了解更多信息:en.cppreference.com
您有2个选择:
std::vector<unsigned char>
(或其他整数类型)代替std::vector<bool>
。使用std::vector<bool>::reference
的返回类型operator[]
如下:
class ReqAtts
{
public:
std::vector<bool>::const_reference operator[](size_t ii) const
{
return _atts[ii];
}
std::vector<bool>::reference operator[](size_t ii)
{
return _atts[ii];
}
private:
std::vector<bool> _atts;
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句