Maison >développement back-end >C++ >Vous voulez de la vitesse ? Valeur transmise : Copy Elision est-il toujours le gagnant en termes de performances ?
Vous voulez de la vitesse ? Passer par valeur : considérations sur les performances
Le principe « Vous voulez de la vitesse ? Passer par valeur » suggère que la transmission d'arguments par valeur peut parfois améliorer les performances en raison de l'élision de copie. Pour illustrer, considérons le code suivant utilisant les classes X et Y :
<code class="cpp">struct X { std::string mem_name; X(std::string name) : mem_name(std::move(name)) {} }; struct Y { std::string mem_name; Y(const std::string &name) : mem_name(name) {} }; int main() { X(foo()); Y(foo()); }</code>
Ici, foo() renvoie une chaîne temporaire qui est transmise aux constructeurs X et Y. Lorsque X initialise mem_name, il invoque le constructeur de déplacement de std::string, ce qui évite potentiellement de copier la chaîne. Cependant, lorsque Y initialise mem_name, il doit copier la référence de chaîne.
Arguments Lvalue vs Rvalue :
Si une lvalue (non temporaire) est transmise, les deux X et Y effectuera une copie. De plus, X effectuera un mouvement. Pour les rvalues (temporaires), X ne peut effectuer qu'un mouvement, tandis que Y doit toujours effectuer une copie.
Implications sur les performances :
Généralement, un mouvement est plus rapide que la passe. un pointeur (équivalent à passer par référence). Par conséquent, X a des performances similaires à Y pour les valeurs l et de meilleures performances pour les valeurs r.
Attention :
Bien que « Vous voulez de la vitesse ? Passer par valeur » soit une idée convaincante, elle doit être appliquée judicieusement. Il est essentiel de prendre en compte le contexte spécifique et la surcharge potentielle associée à la copie de structures de données volumineuses. Le profilage est recommandé pour déterminer l'impact réel sur les performances.
Ressources supplémentaires :
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!