Repenser le passage par valeur en C 11
Dans le monde du C, le passage par valeur a traditionnellement été découragé pour les grandes objets en raison de problèmes de performances. Cependant, l'introduction des références Rvalue et des constructeurs de déplacement dans C 11 ouvre de nouvelles possibilités pour transmettre efficacement des objets.
Le passage par valeur est-il désormais la meilleure valeur par défaut ?
Selon l'expert du secteur Dave Abrahams, il est raisonnable de transmettre des objets volumineux comme std::vector et std::string par valeur si vous devez en faire une copie dans le corps de la fonction. Cela permet au compilateur d'effectuer une optimisation, éliminant ainsi le besoin de copie explicite par le programmeur.
Avantages :
Objets personnalisés :
Pour les objets personnalisés, le passage par référence à const est toujours une option viable, car il fournit flexibilité et minimise le risque de modification involontaire de l'objet d'origine.
Meilleur Pratiques :
Exemple :
Pour implémenter le modèle recommandé, les constructeurs valorisés peuvent être écrits comme suit :
class T { U u; V v; public: T(U u, V v) : u(std::move(u)) , v(std::move(v)) {} };
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!