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

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

本文关键字:没有 data 成员 gt bool 向量 2015 lt MSVS      更新时间:2023-10-16

下面的代码可以很好地编译:

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<bool>专门化的全部要点是,与所有其他向量不同,vector<bool>中的数据不需要作为bool的数组存储。通过在单个字节中封装多个比特,可以更有效地存储数据。因此,data()成员不可能返回bool *

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

vector<bool>在1字节中存储了几个布尔值,因此不可能返回这样的指针