斯科特·迈尔斯(Scott Meyers)的书《Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library》中的第18条建议避免使用vector<bool>
,因为它不是STL容器,也不真正持有bool
值。
以下代码:
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>
的替代品吗?
有人能解释一下吗?
bool
的指针中,因为该元素没有自己的地址。 - chrisstd::vector<bool> v;
可以编译通过。但是&v[0]
不行(取临时变量的地址)。 - Oktalistvector<bool>
的声誉不好,但并非完全无理可言:http://isocpp.org/blog/2012/11/on-vectorbool - TemplateRex