Я читал о std::abs()
функция при просмотре cppreference.
На этой странице я также видел std::labs()
функция. Который имеет тот же прототип, что и один из std::abs()
перегрузки (один для long
).
long abs( long n );
long labs( long n );
а также
long long abs( long long n );
long long llabs( long long n );
Так,
std::labs()
делает?std::labs()
?std::abs()
а также std::labs()
?C ++ 11 был когда std::labs
а также std::llabs
были добавлены. Это было частью частичной синхронизации, выполняемой со стандартной библиотекой C ++ со стандартной библиотекой C99.
Вам действительно не нужно это в коде C ++, потому что у нас был long
перегрузка std::abs
примерно навсегда. Но если у вас есть некоторый код на C (который по совпадению также компилируется с компилятором C ++), и он использует labs
Вы можете собрать его с помощью компилятора C ++ 11 и стандартной библиотеки.
В ретроспективе есть один мало полезный вариант использования этих функций. И это когда попытка использовать std::abs
неоднозначно. Например:
template<typename T>
T run_func(T (&f)(T)) {
return f({});
}
Потом пытаюсь позвонить run_func(std::abs);
плохо сформирован. Нам нужно либо явно указать аргумент шаблона, либо привести std::abs
на правильный тип. С другой стороны run_func(std::labs);
не двусмысленный и не слишком многословный.
Все еще не тоже полезно.
Других решений пока нет …