web-dev-qa-db-fra.com

À quoi sert exactement std :: labs ()?

J'ai lu à propos de la fonction std::abs() lors de la navigation cppreference .

Sur cette page, j'ai également vu une fonction std::labs(). Qui a le même prototype que l'une des surcharges std::abs() (celle de long).

long abs( long n );

long labs( long n );

et

long long abs( long long n );

long long llabs( long long n );

Donc,

  • Que fait exactement std::labs()?
  • Où et quand dois-je utiliser std::labs()?
  • Quelle est la différence entre std::abs() et std::labs()?
46
msc

C++ 11 était lorsque std::labs Et std::llabs Ont été ajoutés. Cela faisait partie de la synchronisation partielle effectuée avec la bibliothèque standard C++ avec la bibliothèque standard C99.

Vous n'en avez pas vraiment besoin dans le code C++, car nous avons eu une surcharge de long de std::abs Depuis presque toujours. Mais si vous avez du code C (qui, par pure coïncidence, se compile également avec un compilateur C++) et qu'il utilise labs, vous pouvez le créer avec un compilateur C++ 11 et une bibliothèque standard.


Rétrospectivement, il existe un cas d'utilisation marginalement utile pour ces fonctions. Et c'est quand une tentative d'utiliser std::abs Est ambiguë. Par exemple:

template<typename T>
T run_func(T (&f)(T)) {
  return f({});
}

Ensuite, essayer d'appeler run_func(std::abs); est mal formé. Nous devons spécifier explicitement l'argument du modèle ou convertir std::abs En type approprié. D'un autre côté, run_func(std::labs); n'est pas ambigu et pas trop verbeux.

Pourtant, pas trop utile.

62
StoryTeller