Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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++ - Fatal编程技术网

如何计算C++中两个数的差值?

如何计算C++中两个数的差值?,c++,C++,如果我只启用double和integer,那么它是4个函数。但我想启用所有数据类型int长浮点双无符号数等。怎么可能呢 #include <iostream> using namespace std; double diff(int num1, int num2) { return double(num1-num2); } double diff(int num1, double num2) { return double(num1)-num2; } doub

如果我只启用double和integer,那么它是4个函数。但我想启用所有数据类型int长浮点双无符号数等。怎么可能呢

#include <iostream>

using namespace std;

double diff(int num1, int num2) {
    return double(num1-num2);
}

double diff(int num1, double num2) {
    return double(num1)-num2;
}

double diff(double num1, int num2) {
    return num1-double(num2);
}

double diff(double num1, double num2) {
    return num1-num2;
}

int main() {
    int a = 10;
    double b = 4.4;
    cout << diff(a, b) << endl;
    return 0;
}

您不必启用操作,只需编写:

cout << (a - b) << endl;

也可以使用int参数调用。

使用模板函数:

template <typename T1, typename T2>
double diff(const T1& lhs, const T2& rhs)
{
  return lhs - rhs;
}

您可以为同一个模板定义一个模板

template <typename T, typename U>
T diff(const T& a, const U& b) {
    return a - b;
}

这段代码做了很多假设,比如运算符-是为T定义的,返回类型将始终是T类型等等…

与我之前添加的关于C++11的所有答案不同。在C++11中,可以使用decltype


diff函数将始终返回第一个参数类型的值。请注意,第一种情况下它是浮点数,但第二种情况下它是整数。

例如,您可以始终使用绝对值计算差值

cout << abs(a - b) << endl;

不过,您可能希望像前面的答案那样使用模板。

我想区别只是一个例子。。。他想知道有关模板的问题,说明如何计算C++中两个数的差值?这对他已经没有什么更好了,除非你也让返回类型通用。“戴维弗康多:我不明白你的评论。它用一个函数而不是四个或更多的函数来解决问题。我的意思是double diffdouble,double也可以解决他的问题。。。diffint,int应该返回一个double还是一个int?@larsmans我相信dayofcondor意味着如果模板的签名是template auto diffT a,U b->decltypea-b;,那么模板会更有意义;。这是一个值得关注的问题,尽管它实际上与作者试图解决的问题没有太大关系。如果我的整数差返回一个双精度,我不喜欢它。或者是复杂度的不同。从参数中推断出返回类型,我们就达成了协议。@DanielFischer:双返回类型与OP的规范相匹配。@larsmans刚刚看到了这一点,令我失望。因此,我们对这个解决方案进行投票。只需说一个-B,忘记这个差异。C++编译器将选择最佳的方法来进行这个计算。谢谢-- 1。我不想使用diff函数。我只是想了解它是如何工作的……这是一个很糟糕的例子,说明你的问题可能根本不存在。有自动进行的标准算术转换,所以你只需要doubledouble,doubleversion。我不明白为什么这个问题应该被否决。虽然它确实来自一个新手,在这个特殊的例子中,您可以使用a-b,但这是一个展示如何以及为什么使用模板的有趣方式。如果您使用对象而不是简单的数据类型,例如矩阵或函数,它也可能很方便。您可以使用decltypea-b
template <typename T, typename U>
T diff(const T& a, const U& b) {
    return a - b;
}
#include <iostream>

template <typename T1, typename T2>
auto diff(T1 a, T2 b) -> decltype(a)
{
   return (a - b);
}

int main() {
   std::cout << diff(3.5, 1) << std::endl;
   std::cout << diff(3, 1.5) << std::endl;
}
cout << abs(a - b) << endl;