在以下代码中:
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支持的类似枚举。charsigned charunsigned char
vector< bool > 是bool类型的特殊类模板特化。
提供这种专门用于优化空间分配:八个bool元素组合为一个字节,每个 bool 元素仅占用一位。
不允许在某个字节中引用一位。
因此该函数无法返回对vector< bool >中a bool类型的引用。
也有人认为vector< bool >不是容器。
您可以改用 deque< bool >。