在vector <bool> </bool>中访问元素的地址时获取临时地址

时间:2011-11-30 10:50:32

标签: c++

我在访问bool的vector中的元素地址时才收到警告。 对于像int这样的其他数据类型的向量,我没有得到任何警告。

例如

vector<bool> boolVect;
boolVect.push_back(false);
if (boolVect.size() > 0) {
    cout << &boolVect[0] << endl;
}   

我在声明“cout&lt;&lt;&amp; boolVect [0]&lt;&lt; endl;”中收到警告“接受临时地址”
请有人澄清一下吗?

2 个答案:

答案 0 :(得分:15)

std::vector<bool>已被破坏(请参阅例如http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=98Alternative to vector<bool>)。它是std::vector<T>的特化,但各个元素存储为打包位。因此,您无法获取单个元素的地址。因此,它真的很烦人。

答案 1 :(得分:3)

vector<bool>是标准vector的模板专精。在正常实现中,它节省了空间,每bool只占用一位。为方便起见,您将获得一个临时对象作为您的单个位的参考,否则您无法解决该问题。