我在 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;
}

预期行为:输出 true1 的一些变体

编译错误(使用 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/

10-11 00:50