在std :: vector <bool>上调用data()时会发生什么?</bool>

时间:2013-05-15 15:20:37

标签: c++ c++11 stl

C ++ 11在data()上实现了std::vector成员函数,它为您提供了一个指向内存数组的指针。这是否意味着模板专业化std::vector<bool>也有此成员?由于此专业化不会以bool *的形式存储数据,因此您可以通过调用data()来实现哪种行为?

4 个答案:

答案 0 :(得分:28)

除非您的实现具有非标准扩展,否则它将无法编译。 C ++ 11 23.3.7 / 1中指定的std::vector<bool>的特化不会声明data成员。

答案 1 :(得分:24)

page明确表示该类,表明该专业化不提供此方法。

  

特殊化与非特殊化向量具有相同的成员函数,除了data,emplace和emplace_back,这些特殊化中不存在。

other page以及C++ specifications的§23.3.7确实证实了这一点。

答案 2 :(得分:3)

没有。每std::vector<bool>

  

不一定将其数据存储在单个连续的块中   存储器中。

没有data()成员。

答案 3 :(得分:1)

好吧,没有std::vector<bool>::data,所以你可以期待的是编译错误。