Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何更改“valarray”的默认“operator==”?_C++_Stl - Fatal编程技术网

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
s
x
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>&);