如何更改`valarray`的默认`operator ==`?

bec*_*cko -2 c++ stl

我可以创建自己的过载==valarray<double>?我不喜欢默认行为,其中x==y(对于valarrays xy)返回一个valarray<bool>.我希望它返回单个bool,trueif xy具有相同的值.

我可以覆盖operator==for 的默认重载valarray<double>.

Bar*_*rry 7

当然.您不能"覆盖默认值",但您可以提供自己的优先级更高的重载:

#include <iostream>
#include <valarray>

bool operator==(const std::valarray<double>& a, const std::valarray<double>& b)
{
    std::cout << "hi\n";
    return true;
}

int main(int argc, char *argv[])
{
    std::valarray<double> a, b;
    a == b; // prints hi
}
Run Code Online (Sandbox Code Playgroud)

由于operator==是非成员函数模板,因此在重载解析中将优先使用非模板的函数.关键是要确保在比较valarray的任何地方,不合格的查找都会发现这个过载.

当然,写起来更安全:

bool equals(const std::valarray<double>&, const std::valarray<double>&);
Run Code Online (Sandbox Code Playgroud)