【问题标题】:MSVS 2015: vector<bool> has no 'data' memberMSVS 2015:vector<bool> 没有“数据”成员
【发布时间】:2015-12-18 05:40:51
【问题描述】:

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

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

我需要为vector&lt;bool&gt;重载这个函数

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&lt;bool&gt; 没有data() 成员的原因是什么?

在这里 (en.cppreference.com) 我没有找到特定于 boolstd::vector 的情况。

代码使用 MSVS 2015 编译。

【问题讨论】:

标签: c++ c++11 visual-studio-2015 std stdvector


【解决方案1】:

vector&lt;bool&gt; 特化的全部意义在于,与所有其他向量不同,vector&lt;bool&gt; 中的数据不需要存储为bool 的数组。通过将多个位打包在一个字节中,可以更有效地存储它。因此,没有bool * 可能由data() 成员返回。

【讨论】:

    【解决方案2】:

    通常vector&lt;T&gt; 将数据存储为T 的一个连续块,因此可以将指向它们的指针作为数组返回。

    vector&lt;bool&gt; 在 1 个字节中存储了多个布尔值,因此无法返回这样的指针

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 2018-02-17
      • 2011-05-19
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多