libstdc ++的std :: vector <bool> :: data有什么作用?

Bau*_*gen 5 c++ gcc libstdc++ c++11

根据标准,std::vector<bool>没有会员功能data().但是,以下代码段与使用libstdc ++的最新GCC编译良好:

#include <vector>

int main () {
    std::vector<bool> v;
    v.data();
}
Run Code Online (Sandbox Code Playgroud)

如果我们尝试使用结果,则返回类型为void.

这是一些gcc扩展还是一个bug?
如果前者是真的,它会做什么?

Bri*_*ian 10

/usr/include/c++/4.8/bits/stl_bvector.h有:

// _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 { }
Run Code Online (Sandbox Code Playgroud)

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

using _Base::data;
Run Code Online (Sandbox Code Playgroud)

所以这似乎是原因:std::vector<bool>除非std::vector<bool>::data存在,否则调试版本将无法编译.

  • 伤心。如果它返回一个指向打包缓冲区的指针,将很有用。为什么不将其设为“私有”? (2认同)