I need to use cmath's abs() function, but Visual Studio says it's overloaded and I can't even use something like this:
unsigned a = 5, b = 10, c;
c = abs(a-b);
I don't know how to use it properly.
The versions in <cmath>
are for floating point types, so there is no unambiguously best match. The overload for integral types are in <cstdlib>
, so one of those will yield a good match. If you are using abs
on different types, you can use both includes and let overload resolution do its work.
#include <cmath>
#include <cstdlib>
#include <iostream>
int main()
{
unsigned int a = 5, b = 10, c;
c = std::abs(a-b);
std::cout << c << "\n"; // Ooops! Probably not what we expected.
}
On the other hand, this doesn't yield correct code, since the expression ab
does not invoke integer promotion , so the result is an unsigned int
. The real solution is to use signed integral types for differences, as well as the integral type std::abs
overloads.
As you can see here , there is no cmath function abs
that takes an unsigned integer. This is because unsigned integers are never negative. Try doing the following instead:
int a = 5, b = 10;
int c = abs(a-b);
In this case, c = 5
as expected.
您可以使用三元运算符:
c = (a > b) ? a - b : b - a;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.