在下面的代码中:
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 char
或 unsigned char
,如果您关心符号性)支持的类似bool
枚举。
vector
提供此专用化是为了优化空间分配:八个布尔元素组合成一个字节,每个布尔元素仅占用一位。
不允许引用某个字节中的一个位。
因此,该函数无法返回对vector<<strong>bool>中布尔类型的引用。
有人还认为vector<<strong>bool>不是一个容器。
您可以改用 deque<<strong>bool>。