cmath の abs() 関数を使用する必要がありますが、Visual Studio はそれがオーバーロードされていると言っており、次のようなものを使用することさえできません。
unsigned a = 5, b = 10, c;
c = abs(a-b);
正しい使い方がわかりません。
cmath の abs() 関数を使用する必要がありますが、Visual Studio はそれがオーバーロードされていると言っており、次のようなものを使用することさえできません。
unsigned a = 5, b = 10, c;
c = abs(a-b);
正しい使い方がわかりません。
のバージョンは<cmath>
浮動小数点型用であるため、明確に最適な一致はありません。整数型のオーバーロードは に<cstdlib>
あるため、そのうちの 1 つが適切に一致します。abs
異なるタイプで使用している場合は、両方のインクルードを使用して、オーバーロード解決を機能させることができます。
#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.
}
一方、式は整数の昇格a-b
を呼び出さないため、これは正しいコードを生成しません。したがって、結果は. 本当の解決策は、整数型のオーバーロードだけでなく、差分に符号付き整数型を使用することです。unsigned int
std::abs
ここでわかるようabs
に、符号なし整数を取るcmath 関数はありません。これは、符号なし整数が負にならないためです。代わりに次のことを試してください。
int a = 5, b = 10;
int c = abs(a-b);
この場合はc = 5
予想通り。
三項演算子を使用できます。
c = (a > b) ? a - b : b - a;