我在 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;
}
预期行为:输出
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;
^
这个编译错误是什么意思,如何解决?
最佳答案
问题是将 valarrays 与 ==
进行比较不会返回 bool
,它返回 std::valarray<bool>
,按元素进行比较。
如果你想比较它们是否相等,你可以对结果调用 min()
,因为 false < true
:
return (a*x==b).min();
关于c++ - 奇怪的 C++ 编译错误与 valarrays,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24628918/