MSVS 2015:vector<bool> 没有 'data' 成员

MSVS 2015: vector<bool> has no 'data' member

我有以下编译得很好的代码:

void foo::bar(const vector<int> arg) {
    int* ptr = arg.data();
    // do something with ptr
}

我需要为 vector<bool>

重载此函数
void foo::bar(const vector<bool> arg) {
    int* ptr = arg.data(); 
    // error C2039: 'data': is not a member ofstd::vector<bool,std::allocator<_Ty>>'
    // do something with ptr
}

vector<bool> 没有 data() 成员的原因是什么?

这里 (en.cppreference.com) 我没有找到 std::vectorbool 案例的特定内容。

代码使用MSVS 2015编译。

通常 vector<T> 将数据存储为 T 的一个连续块,因此可以 return 指向它们的指针作为数组。

vector<bool>在1个字节中存储了几个布尔值,所以return这样的指针是不可能的

vector<bool> 专业化的全部要点在于,与所有其他向量不同,vector<bool> 中的数据不需要存储为 bool 的数组。通过在单个字节中打包多个位,可以更有效地存储它。因此,没有 bool * 可能由 data() 成员返回。