4

在以下代码中:

class SomeClass {
    vector<int> i;
    vector<bool> b;

public:
    int& geti() {return i[0];}
    bool& getb() {return b[0];}
};

如果你注释掉getb(),代码编译得很好。显然返回对int存储在向量中的引用没有问题,但你不能用bool.

为什么是这样?

4

2 回答 2

11

std::vector<bool>是“特别”。它将其元素存储为位数组,这意味着元素不可单独寻址,并且您无法获得对元素的引用。

std::vector<bool>迭代器、其operator[]及其其他成员函数返回代理对象,这些代理对象提供对元素的访问,而无需bool存储实际对象。

如果您需要能够访问单个元素,请考虑使用 astd::vector<char>或定义由 a (或 a or ,如果您关心签名)bool支持的类似枚举。charsigned charunsigned char

于 2012-07-02T02:32:44.687 回答
2

vector< bool > 是bool类型的特殊类模板特化。

提供这种专门用于优化空间分配:八个bool元素组合为一个字节,每个 bool 元素仅占用一位。

不允许在某个字节中引用一位。

因此该函数无法返回对vector< bool >中a bool类型的引用。

也有人认为vector< bool >不是容器。

您可以改用 deque< bool >。

于 2012-07-02T02:40:12.770 回答