46 votes

Qu'est-ce que std :: labs () existe exactement?

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

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

long abs( long n );

long labs( long n );

et

long long abs( long long n );

long long llabs( long long n );

Donc,

  • Qu'est-ce exactement std::labs() n'?
  • Où et quand dois-je utiliser std::labs()?
  • Quelle est la différence entre std::abs() et std::labs()?

62voto

StoryTeller Points 6139

C++11 a été lors de l' std::labs et std::llabs ont été ajoutés. Cela faisait partie de la synchronisation partielle faite à la norme C++ de la bibliothèque avec le standard C99 bibliothèque.

Vous n'avez pas vraiment besoin du code C++, parce que nous avions un long de surcharge de std::abs depuis toujours. Mais si vous avez du code C (qui par pure coïncidence compile également les avec un compilateur C++), et il utilise labs, vous pouvez le compiler avec un compilateur C++11 et de la bibliothèque standard.


En rétrospective, il y a une utilité marginale en cas d'utilisation de ces fonctions. Et c'est lors d'une tentative pour utiliser std::abs "est ambigu. Par exemple:

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

Puis d'essayer de les appeler run_func(std::abs); est mal formé. Nous avons besoin de spécifier l'argument de modèle explicitement ou cast std::abs pour le type approprié. D'autre part run_func(std::labs); n'est pas ambigu, et pas trop verbeux.

Encore, pas trop utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X