libstdc++的std::vector<bool>::d ata是做什么的?

What does libstdc++'s std::vector<bool>::data do?

本文关键字:ata 什么 gt vector lt libstdc++ bool std      更新时间:2023-10-16

根据标准,std::vector<bool>不存在成员函数data()。但是,下面的代码片段可以很好地使用libstdc++编译最新的GCC:

#include <vector>
int main () {
    std::vector<bool> v;
    v.data();
}

如果我们尝试使用结果,结果显示返回类型是void

这是一个gcc扩展还是一个bug?
如果前者是真的,它有什么作用?

我的/usr/include/c++/4.8/bits/stl_bvector.h has:

// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 464. Suggestion for new member functions in standard containers.
// N.B. DR 464 says nothing about vector<bool> but we need something
// here due to the way we are implementing DR 464 in the debug-mode
// vector class.
void
data() _GLIBCXX_NOEXCEPT { }

/usr/include/c++/4.8/debug/vector中,我看到声明:

using _Base::data;

所以这似乎是原因:std::vector<bool>的调试版本不会编译,除非std::vector<bool>::data存在。