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值封装并存储在向量中,或者只使用(比如)charstd::vector
的向量也可能是合适的替代方法。
bool* tmpArr = tmp.data();