C++ &引用;无效值不应被忽略,因为它应该是;关于非空函数

C++ &引用;无效值不应被忽略,因为它应该是;关于非空函数,c++,gcc,c++14,C++,Gcc,C++14,这是我的密码 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].affect

这是我的密码

  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]);
    }
  }
向我抛出错误:“无效值不应被忽略” 我查看了文档,确定vector的数据方法是非空的,应该返回一个指针:>

你知道会出什么问题吗

重要事项:

  • 包括向量
  • 我在gcc上的编译标志:-Wall-Wextra-Wcast qual-pedantic-pedantic errors-Wfatal errors-Wno缺少大括号-Werror
  • 该函数是一个类,但我没有添加其余部分,因为它只是将焦点从问题上移开,它是一个使用复杂体系结构并行运行的类

  • 不幸的是,向量是特殊的


    您最好切换到
    vector
    ,简单引用Scott Meyers在其有效的STL书籍第18项中的话:“避免使用
    vector
    ”。这种专门化的语义意味着它不完全符合标准中的容器要求,因为它实际上并不存储bool;它使用位存储压缩表示

    每当您需要访问单个“
    bool
    s”或需要指向数据序列的指针(如示例中所示)时,您就会遇到麻烦,因为无法获得指向单个位的指针


    正如上面@john所提到的,
    vector
    可以很好地为您服务。或者,如果您将函数重写为使用迭代器而不是指针,您可以尝试使用
    deque

    这是
    std::vector
    专门化的一个特殊问题,您无法获得一个位的地址。这个问题的答案可能很有用,要解决这个问题,您可能可以创建一个简单的结构,将bool值封装并存储在向量中,或者只使用(比如)char
    std::vector
    的向量也可能是合适的替代方法。
          bool* tmpArr = tmp.data();