37

C++11 已经实现了data()成员函数 on std::vector,它给你一个指向内存数组的指针。这是否意味着模板专业化std::vector<bool>也有这个成员?由于此专业化不存储数据,bool *您可以从调用中获得什么样的行为data()

4

4 回答 4

29

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

于 2013-05-15T15:22:26.850 回答
27

记录该类的此页面明确表明该专业化不提供此方法。

特化具有与非特化向量相同的成员函数,除了 data、emplace 和 emplace_back,它们不存在于本特化中。

这个其他页面以及C++ 规范的 §23.3.7确实证实了这一点。

于 2013-05-15T15:25:13.647 回答
3

没有。std::vector<bool>

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

没有data()会员。

于 2013-05-15T15:24:13.057 回答
1

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

于 2013-05-15T15:24:02.837 回答