Qu’est-ce que std :: labs () est exactement là pour ça?

J’ai lu à propos de la fonction std::abs() lors de la navigation dans 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 pour long ).

 long abs( long n ); long labs( long n ); 

et

 long long abs( long long n ); long long llabs( long long n ); 

Alors,

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

C ++ 11 était quand std::labs et std::llabs ont été ajoutés. Cela faisait partie de la synchronisation partielle effectuée sur 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 long surcharge de std::abs depuis à peu près toujours. Mais si vous avez du code C (qui, par pure coïncidence, comstack aussi avec un compilateur C ++), et qu’il utilise des labs , vous pouvez le construire 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 T run_func(T (&f)(T)) { return f({}); } 

Ensuite, essayez d’appeler run_func(std::abs); est mal formé. Nous devons soit spécifier explicitement l’argument template, soit cast std::abs au type approprié. D’autre part, run_func(std::labs); n’est pas ambigu, et pas trop verbeux.

Pourtant, pas trop utile.