非无效函数上的“无效值不应该被忽略”

时间:2018-07-15 20:35:07

标签: c++ gcc c++14

这是我的代码

TaskStackBuilder

线

  void execute() {
    for (u32 f = 0; f < numForces; f++)
    {
      u32 length = end - start;
      PhysicalObject* arr = objects + start;
      std::vector<bool> tmp(length);
      bool* tmpArr = tmp.data();
      forces[f].affected(arr, length, tmpArr);
      for(u32 index = 0; index < length; index++)
        if (tmp[index])
          forces[f].apply(arr[index]);
    }
  }

向我抛出错误:“无效值不应该被忽略” 我查看了文档,确定矢量的数据方法是非无效的,应该返回一个指针:> http://www.cplusplus.com/reference/vector/vector/data/

有什么想法可能会出问题吗?

重要的事情:

  • 我要包含向量
  • 我在gcc上的编译标志:-Wall -Wextra -Wcast-qual -pedantic -pedantic-errors -Wfatal-errors -Wno-missing-braces -Werror
  • 该函数是一个类,但我没有添加其余部分,因为它只是消除了问题的焦点,并且是使用复杂的体系结构并行运行的类。

2 个答案:

答案 0 :(得分:5)

很遗憾,vector<bool>很特殊。

https://en.cppreference.com/w/cpp/container/vector_bool

您最好切换到vector<uint8_t>

答案 1 :(得分:3)

要简要引用Scott Meyers的《 有效的STL 》一书中的第18项:“避免使用vector<bool>”。这种专业化的语义意味着它不完全符合标准中的容器要求,因为它实际上并不存储布尔值;而是使用位存储压缩的表示形式。

每当您需要访问单个“ bool”或需要指向数据序列的指针(如您的示例)时,都会遇到麻烦,因为无法获取指向对象的指针。一位。

如上面@john所述,vector<uint8_t>可能会为您服务。或者,如果重写函数以使用迭代器而不是指针,则可以尝试使用deque<bool>