Révision des conventions de transmission de paramètres pour l'optimisation
Dans une récente conférence, Herb Sutter a suggéré que la transmission des objets std::vector et std::string par const & devient obsolète. Cette affirmation a suscité des discussions parmi les programmeurs.
Raison d'être de Sutter
Sutter soutient que dans les cas où la fonction renvoie une valeur r (c'est-à-dire un objet temporaire), transmettre l'entrée le paramètre par valeur permet une gestion plus efficace à l’aide de la sémantique de déplacement. Cela évite les copies ou allocations de mémoire inutiles.
Considérez l'extrait de code suivant :
std::string do_something ( std::string inval ) { std::string return_val; // ... do stuff ... return return_val; }
Passer inval par valeur permet à la fonction de modifier et de renvoyer directement la valeur, éliminant ainsi le besoin d'une copie. constructeur.
Préoccupations concernant Efficacité
Les critiques affirment que transmettre des objets volumineux comme std::string par valeur peut toujours être inefficace en raison de la surcharge liée au déplacement de l'objet. Une instance std::string se compose de plusieurs composants, dont un pointeur de tas et un membre char[] pour l'optimisation des chaînes courtes.
Arguments pour les paramètres de référence
Malgré le inefficacités potentielles, les partisans des paramètres de référence soutiennent qu'ils offrent plusieurs avantages :
Conclusion
Le choix de transmettre les objets par const & ou par valeur dépend du cas d'utilisation spécifique. Dans les situations où l'efficacité est critique et où la fonction fonctionne sur des rvalues, le passage de valeur avec la sémantique de déplacement peut offrir des avantages en termes de performances. Cependant, dans les cas où l'encapsulation, la simplicité ou la gestion de la propriété sont importantes, les paramètres de référence restent précieux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!