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

What happens when you call data() on a std::vector<bool>?

本文关键字:什么 lt bool gt vector std 调用 data 当你      更新时间:2023-10-16

c++ 11在std::vector上实现了data()成员函数,它给你一个指向内存数组的指针。这是否意味着模板专门化std::vector<bool>也有这个成员?由于这种专门化不以bool *的形式存储数据,那么调用data()会产生什么样的行为呢?

它不会编译,除非你的实现有一个非标准的扩展。std::vector<bool>的专门化,如c++ 11 23.3.7/1中规定的,不声明data成员。

这个记录该类的页面明确指出专门化不提供此方法。

专门化具有与未专门化vector相同的成员函数,除了data、emplace和emplace_back,它们在专门化中不存在。

另一页以及c++规范的§23.3.7都证实了这一点。

No。Per std::vector<bool>

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

没有data()成员。

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