MSVS 2015:向量<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<bool>
专门化的全部要点是,与所有其他向量不同,vector<bool>
中的数据不需要作为bool
的数组存储。通过在单个字节中封装多个比特,可以更有效地存储数据。因此,data()
成员不可能返回bool *
。
通常vector<T>
将数据存储为T
的一个连续块,因此可以像返回数组一样返回指向它们的指针。
vector<bool>
在1字节中存储了几个布尔值,因此不可能返回这样的指针
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 如果没有malloc,链表实现将失败
- 数组索引的值没有增加
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 变量没有改变?通过向量的函数调用
- 没有名称的C++模板参数
- 在线编译器中的分段C++没有打印消息
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 没有用于初始化C++中的变量模板的匹配构造函数
- 调用'begin(int [n])'没有匹配函数
- 使用C++程序合并排序没有得到正确的输出
- 为什么在这个代码结束循环中没有得到结束
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++有没有像Haskell Data.Sequence这样的东西?
- MSVS 2015:向量<bool>没有'data'成员