fmin
et fmax
sont spécifiquement pour une utilisation avec des nombres à virgule flottante (d'où le "f"). Si vous l'utilisez pour les services de renseignements, vous pouvez souffrir de la performance ou de précision, les pertes dues à la conversion, appel de fonction, les frais généraux, etc. en fonction de votre compilateur/plate-forme.
std::min
et std::max
sont des templates de fonctions qui fonctionnent sur n'importe quel type avec un moins (<
) de l'opérateur, de sorte qu'ils peuvent fonctionner sur n'importe quel type de données qui permet une telle comparaison. Vous pouvez également fournir votre propre fonction de comparaison si vous n'avez pas envie de travailler à partir d' <
.
C'est plus sûr puisque vous avez à convertir explicitement les arguments de match quand ils ont des types différents. Le compilateur ne vous laisse pas accidentellement convertir un 64-bit int dans un 64-bit à virgule flottante, par exemple. Cette raison à elle seule les modèles par défaut de votre choix. (Crédit à Matthieu M & bk1e)
Même lorsqu'il est utilisé avec des flotteurs, le modèle peut gagner en performance. Un compilateur a toujours l'option de l'in-lining appels de modèle de fonctions puisque le code source est la partie de l'unité de compilation. Parfois, il est impossible de l'inclure un appel à une fonction de la bibliothèque, d'autre part (bibliothèques partagées, l'absence de lien d'optimisation, etc.).