Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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++ 运算符-重载(相同的参数,不同的返回类型)_C++_Overloading_Operator Keyword - Fatal编程技术网

C++ 运算符-重载(相同的参数,不同的返回类型)

C++ 运算符-重载(相同的参数,不同的返回类型),c++,overloading,operator-keyword,C++,Overloading,Operator Keyword,如何重载接受相同数量参数但返回类型不同的减号运算符 模板类: template <typename T> T minus (T x, T y) { return (x - y); } template <typename T> double absMinus (T x, T y) { double sd = abs(x - y); return sd; } 当我试图编译时,它给了我以下错误: Minus.h:25: error: new dec

如何重载接受相同数量参数但返回类型不同的减号运算符

模板类:

template <typename T>
T minus (T x, T y) {
    return (x - y);
}

template <typename T>
double absMinus (T x, T y) {
    double sd = abs(x - y);
    return sd;
}
当我试图编译时,它给了我以下错误:

Minus.h:25: error: new declaration ‘double operator-(Minus&, Minus&)’
Minus.h:24: error: ambiguates old declaration ‘Minus operator-(Minus&, Minus&)’

不能,重载解析仅根据函数参数的类型选择重载。

不,不能。仅当参数列表不同时才能执行重载。例如:

int myFun(int);
double myFun(int);

现在您正在呼叫
myFun(10)
。编译器无法确定调用哪个版本。

运算符重载只是函数/方法重载的扩展。对于函数重载,函数的签名应该不同。正如你在文章中所报道的,这两个函数的签名是相同的

请注意,函数/方法签名不包括返回类型


有关此主题的更多信息,请阅读此处:

您不能仅在返回类型上重载函数。你期望什么
p-x返回?您不需要将结果分配给任何东西,只需编写
p-x。注意:您应该使用此类运算符返回常量或对常量的引用。否则,您将能够编写愚蠢的语句,例如
(a-b)=c@JBL不,你搞错了。@LuchianGrigore哦?我想是的,这会使条件语句中的输入错误(即缺少一个=)与编译时错误突出。。。
int myFun(int);
double myFun(int);