C++ 如何更改“valarray”的默认“operator==”?
我可以为C++ 如何更改“valarray”的默认“operator==”?,c++,stl,C++,Stl,我可以为valarray创建自己的==重载吗?我不喜欢x==y(对于valarraysx和y)返回valarray的默认行为。如果x和y具有相同的值,我希望它返回单个bool,true 我可以为valarray覆盖operator==的默认重载吗。您不能“覆盖默认值”,但您可以提供您自己的具有更高优先级的重载: #include <iostream> #include <valarray> bool operator==(const std::valarray<d
valarray
创建自己的==
重载吗?我不喜欢x==y
(对于valarray
sx
和y
)返回valarray
的默认行为。如果x
和y
具有相同的值,我希望它返回单个bool
,true
我可以为valarray
覆盖operator==
的默认重载吗。您不能“覆盖默认值”,但您可以提供您自己的具有更高优先级的重载:
#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
}
这个问题有什么不同?为什么不做一个“正常”的非运算符函数呢?当然!您可以提供具有更高优先级的自己的重载,但不能覆盖默认值(您不喜欢它的行为!)。这里的技巧是确保在比较valarray的任何地方,非限定查找都会找到此重载。请尝试
等于(x+y+z,t)
,其中x
,y
,z
和t
是valarray
。它不起作用,因为x+y+z
返回的“代理”表达式类在重载解析中与valarray
不匹配。我怎样才能解决这个问题?
bool equals(const std::valarray<double>&, const std::valarray<double>&);