Для чего именно используется std :: labs ()?

Я читал о 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()?

45

Решение

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); не двусмысленный и не слишком многословный.

Все еще не тоже полезно.

62

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]