c++ - vector<bool> 在 const data() 方法上引发错误

标签 c++ vector

我有以下代码:

#include <vector>

struct TestStruct {
    std::vector<float> float_vect;
    std::vector<bool> bool_vect;
};

void func(const TestStruct & test)
{
    const float * p1 = test.float_vect.data();  //<---   this line works fine
    const bool * p2 = test.bool_vect.data();    //<---   on this line error happens
}

int main()
{
    TestStruct test;
    func(test);
}

错误消息:

passing 'const std::vector' as 'this' argument of 'void std::vector::data() [with _Alloc = std::allocator]' discards qualifiers [-fpermissive]

std::vector 的 data() 方法指定了 const

为什么此方法在浮点 vector 上工作正常,但在 bool vector 上引发错误?

最佳答案

vector<bool>是一个好老的专精vector<T>并且其实现方式可能与普通vector不同(例如,可以采用一些节省空间的优化)。这种设计的副作用是它并不总是表现得像普通的那样vector (许多人认为 vector<bool> 因此而被破坏)。

例如,http://en.cppreference.com/w/cpp/container/vector_bool 处的引用没有提到vector<bool>::data()根本不。因此 - 在使用 vector 时不应使用它类型 bool 。事实上,您不会收到类似于 method not found 的错误是 - 在你的情况下 - 只是如何vector<bool>的问题由您的编译器实现。

关于c++ - vector<bool> 在 const data() 方法上引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46487039/

相关文章:

c++ - parallel_do_feeder 线程安全吗?

c++ - 多维数组问题

c++ - 升级到 TensorRT 7 后加载或构建 cuda 引擎偶尔会崩溃

r - 两个向量相乘 - 我想要一个标量,但我得到一个向量?

c++ - 使用 DFS 在图中查找连通分量 (adjA)

c++ - 在 visual studio 中编码错误而不是 turbo C++ - C

c++ - 使用 cygwin 从 Nmake 切换到 MinGW

c++ - 为什么填充我的 std::vector 的运行时间在 0 到 ~16 毫秒之间跳跃?

math - 根据半径计算从正方形中心到边缘的向量

c++ - vector 引用 C++