如何更改 `valarray` 的默认 `operator==`?
How to change default `operator==` for `valarray`?
我可以为 valarray<double>
创建自己的 ==
重载吗?我不喜欢 x==y
(对于 valarray
s x
和 y
)returns a valarray<bool>
的默认行为。如果 x
和 y
具有相同的值,我希望它 return 单个 bool
,true
。
我可以为 valarray<double>
.
覆盖 operator==
的默认重载吗
当然可以。你不能 "overwrite the default",但你可以提供你自己的具有更高优先级的重载:
#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
}
由于 operator==
是非成员函数模板,因此在重载决策中将首选不是模板的函数。关键是要确保你比较 valarray
的任何地方,不合格的查找都会发现这个过载。
当然,直接写会安全很多:
bool equals(const std::valarray<double>&, const std::valarray<double>&);
我可以为 valarray<double>
创建自己的 ==
重载吗?我不喜欢 x==y
(对于 valarray
s x
和 y
)returns a valarray<bool>
的默认行为。如果 x
和 y
具有相同的值,我希望它 return 单个 bool
,true
。
我可以为 valarray<double>
.
operator==
的默认重载吗
当然可以。你不能 "overwrite the default",但你可以提供你自己的具有更高优先级的重载:
#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
}
由于 operator==
是非成员函数模板,因此在重载决策中将首选不是模板的函数。关键是要确保你比较 valarray
的任何地方,不合格的查找都会发现这个过载。
当然,直接写会安全很多:
bool equals(const std::valarray<double>&, const std::valarray<double>&);