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