Les questions / réponses sont grands et certainement pour le comité des normes ont été essentielles à cette fin. Mais il y a un autre problème qui je pense est assez important de le mentionner.
Avec gratuit fonctions, vous avez la possibilité de modifier une interface sans modification de la définition d'une classe. Vous pouvez faire n'importe quel type "get" il suffit de par la spécialisation mondiale get
. Avec une fonction membre, vous devez modifier directement la classe.
C'est une des raisons pour lesquelles basés sur la plage, for
est construit sur std::begin/std::end
au lieu de chercher des fonctions membres. std::begin/end
sont spécialisés par type de matrice, de sorte que vous pouvez utiliser basés sur la plage, for
avec des tableaux. Vous pouvez l'utiliser avec n'importe quel conteneur, même ceux qui n'ont pas d' begin/end
fonctions. Vous pouvez vous spécialiser pour, par exemple, LibXML2 types d'éléments, de sorte que vous pouvez basés sur la plage, for
sur xmlElement*
s'.
Vous ne pouvez pas le faire s'ils devaient être des fonctions membres.
En C++, libre les fonctions sont une interface naturelle pour de nombreuses opérations qui pourraient être faites sur de nombreux types de classes.