Maison >développement back-end >C++ >C 11 : RVO ou `std::move` explicite pour les valeurs de retour ?
c 11 Optimisation ou déplacement de la valeur de retour ?
Lorsqu'ils traitent des objets qui ont une sémantique de déplacement, les programmeurs peuvent se demander s'ils doivent utiliser explicitement std : : déplacez ou comptez sur le compilateur pour effectuer l'optimisation de la valeur de retour (RVO). Dans des cas comme ceux-ci :
using SerialBuffer = vector< unsigned char >; // let compiler optimize it SerialBuffer read( size_t size ) const { SerialBuffer buffer( size ); read( begin( buffer ), end( buffer ) ); // Return Value Optimization return buffer; } // explicit move SerialBuffer read( size_t size ) const { SerialBuffer buffer( size ); read( begin( buffer ), end( buffer ) ); return move( buffer ); }
quelle approche est préférable ?
La réponse est claire : utilisez toujours la première méthode. Le compilateur est déjà capable d'optimiser le retour, et l'utilisation explicite de std::move interfère en fait avec cette optimisation.
L'élision de copie permet d'utiliser le constructeur de déplacement lors du renvoi d'une référence rvalue à une variable définie localement. . En déplaçant explicitement le résultat, vous empêchez le compilateur d'effectuer cette optimisation à votre place.
Par conséquent, pour des performances optimales, tenez-vous-en exclusivement à la première méthode sans le déplacement explicite. Laissez le compilateur gérer l'optimisation, car il est garanti de produire le code le plus efficace possible.
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!