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::vector
的 bool
案例的特定内容。
代码使用MSVS 2015编译。
通常 vector<T>
将数据存储为 T
的一个连续块,因此可以 return 指向它们的指针作为数组。
vector<bool>
在1个字节中存储了几个布尔值,所以return这样的指针是不可能的
vector<bool>
专业化的全部要点在于,与所有其他向量不同,vector<bool>
中的数据不需要存储为 bool
的数组。通过在单个字节中打包多个位,可以更有效地存储它。因此,没有 bool *
可能由 data()
成员返回。
我有以下编译得很好的代码:
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::vector
的 bool
案例的特定内容。
代码使用MSVS 2015编译。
通常 vector<T>
将数据存储为 T
的一个连续块,因此可以 return 指向它们的指针作为数组。
vector<bool>
在1个字节中存储了几个布尔值,所以return这样的指针是不可能的
vector<bool>
专业化的全部要点在于,与所有其他向量不同,vector<bool>
中的数据不需要存储为 bool
的数组。通过在单个字节中打包多个位,可以更有效地存储它。因此,没有 bool *
可能由 data()
成员返回。