在以下代码中:
class SomeClass {
vector<int> i;
vector<bool> b;
public:
int& geti() {return i[0];}
bool& getb() {return b[0];}
};
如果你注释掉getb()
,代码编译得很好。显然返回对int
存储在向量中的引用没有问题,但你不能用bool
.
为什么是这样?
std::vector<bool>
是“特别”。它将其元素存储为位数组,这意味着元素不可单独寻址,并且您无法获得对元素的引用。
std::vector<bool>
迭代器、其operator[]
及其其他成员函数返回代理对象,这些代理对象提供对元素的访问,而无需bool
存储实际对象。
如果您需要能够访问单个元素,请考虑使用 astd::vector<char>
或定义由 a (或 a or ,如果您关心签名)bool
支持的类似枚举。char
signed char
unsigned char
vector< bool > 是bool类型的特殊类模板特化。
提供这种专门用于优化空间分配:八个bool元素组合为一个字节,每个 bool 元素仅占用一位。
不允许在某个字节中引用一位。
因此该函数无法返回对vector< bool >中a bool类型的引用。
也有人认为vector< bool >不是容器。
您可以改用 deque< bool >。