从 Vector 返回 bool&



在下面的代码中:

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对象。

如果需要能够访问单个元素,请考虑使用 std::vector<char> 或定义由 char(或 signed charunsigned char,如果您关心符号性)支持的类似bool枚举。

vector> 是布尔类型的特殊类模板专用化。

提供此专用化是为了优化空间分配:八个布尔元素组合成一个字节,每个布尔元素仅占用一位。

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

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

有人还认为vector<<strong>bool>不是一个容器。

您可以改用 deque<<strong>bool>。