web-dev-qa-db-fra.com

Fonctions membres std :: string length () et size ()

Je lisais les réponses à cette question question et découvris qu’il existe une méthode appelée length() pour std::string (j’ai toujours utilisé size()). Existe-t-il une raison spécifique pour avoir cette méthode dans la classe std::string? J'ai lu MSDN et CppRefernce, et ils semblent indiquer qu'il n'y a pas de différence entre size() et length(). Si tel est le cas, cela ne crée-t-il pas plus de confusion pour l'utilisateur de la classe?

230
Naveen

Selon le documentation , ce ne sont que des synonymes. size() doit-il être cohérent avec d'autres conteneurs STL (comme vector, map, etc.) et length() doit être cohérent avec la plupart notion intuitive des gens de chaînes de caractères. Les gens parlent généralement d'un mot, d'une phrase ou d'un paragraphe longueur, pas de sa taille, donc length() est là pour rendre les choses plus lisibles.

303
Todd Gamblin

Ruby est exactement la même chose, btw, offrant les deux #lengthet#size comme synonymes du nombre d'éléments dans les tableaux et les hachages (C++ ne le fait que pour les chaînes).

Les minimalistes et les personnes qui croient "qu’il devrait exister un, et idéalement un seul moyen évident de le faire" (comme le récite le zen de Python) seront, je suppose, pour la plupart d'accord avec vos doutes, @Naveen, tandis que Les fans de Perl "Il y a plus d'une façon de le faire" (ou la syntaxe de SQL avec des "mots parasites" facultatifs, donnant plusieurs formes syntaxiques identiques pour exprimer un concept) se plaindront sans conteste que Ruby, et en particulier C++, ne n'allez pas assez loin en offrant une telle redondance synonyme ;-).

15
Alex Martelli