【发布时间】:2013-07-21 14:25:10
【问题描述】:
Scott Meyers 的书Effective STL: 50 Specific Ways to Improvement Your Use of the Standard Template Library 的第 18 项说要避免使用 vector <bool>,因为它不是 STL 容器,而且它实际上并不适用bools.
以下代码:
vector <bool> v;
bool *pb =&v[0];
不会编译,违反了 STL 容器的要求。
错误:
cannot convert 'std::vector<bool>::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization
vector<T>::operator []返回类型应该是T&,但是为什么vector<bool>是个特例呢?
vector<bool> 真正由什么组成?
物品进一步说:
deque<bool> v; // is a STL container and it really contains bools
这可以用作vector<bool> 的替代品吗?
谁能解释一下?
【问题讨论】:
-
这是 C++98 中的一个设计错误,现在为了兼容性而保留。
-
@g-makulik,并不是说使用它不会编译,只是你不能将元素的地址存储在指向
bool的指针中,因为元素没有'没有自己的地址。 -
@g-makulik
std::vector<bool> v;将编译。&v[0]不会(取临时地址)。 -
vector<bool>的名声不好,但并非完全有道理:isocpp.org/blog/2012/11/on-vectorbool
标签: c++ vector stl containers bitvector