The*_*vat 3 c++ compiler-errors std syntax-error valarray
我在C++中使用valarrays有一个奇怪的编译错误.
这是我的代码的精简版:
#include <iostream>
#include <valarray>
using namespace std;
bool test(const int &x,const valarray<int> &a,const valarray<int> &b) {
return a*x==b;
}
int main() {
int a1[3]= {1,2,3};
int b1[3]= {2,4,6};
valarray<int> a(a1,3);
valarray<int> b(b1,3);
int x=2;
cout<<test(x,a,b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
预期的行为:输出true或的一些变体1
编译错误(使用g ++):
main.cpp: In function ‘bool test(const int&, const std::valarray<int>&, const std::valarray<int>&)’:
main.cpp:7:14: error: cannot convert ‘std::_Expr<std::_BinClos<std::__equal_to, std::_Expr, std::_ValArray, std::_BinClos<std::__multiplies, std::_ValArray, std::_Constant, int, int>, int>, bool>’ to ‘bool’ in return
return a*x==b;
^
Run Code Online (Sandbox Code Playgroud)
这个编译错误意味着什么,以及如何解决它?
问题是比较valarrays ==并没有返回a bool,它返回std::valarray<bool>,进行比较元素.
如果要比较它们是否相等,可以调用min()结果,因为false < true:
return (a*x==b).min();
Run Code Online (Sandbox Code Playgroud)
是什么阻碍了您阅读文档?==对于 valarrays 来说,这种方式不起作用。它按索引比较每个元素并返回bool包含每个结果的新 s valarray。
事实上,valarrays 的全部目的是能够对一组有序值进行快速、简单的操作,而不必到处编写循环。