Maison > développement back-end > C++ > RVO vs déplacement explicite dans C 11 : quand dois-je utiliser lequel ?

RVO vs déplacement explicite dans C 11 : quand dois-je utiliser lequel ?

Barbara Streisand
Libérer: 2024-12-21 07:11:09
original
195 Les gens l'ont consulté

RVO vs. Explicit Move in C  11: When Should I Use Which?

Optimisation de la valeur de retour par rapport au déplacement explicite dans C 11 : lequel utiliser ?

Dans C 11, les développeurs ont la possibilité d'améliorer les performances grâce à deux techniques : l'optimisation de la valeur de retour (RVO) et les opérations de déplacement explicites à l'aide de std::move. Lors de la détermination de l'approche à utiliser, il est essentiel de comprendre les différences et leur applicabilité respective.

Optimisation de la valeur de retour (RVO)

RVO est une technique d'optimisation mise en œuvre par le compilateur qui élimine les opérations de copie inutiles. Lorsque l'instruction return d'une fonction implique un objet dont la durée de vie se termine immédiatement après l'exécution de la fonction, le compilateur peut optimiser la copie en renvoyant directement la valeur de l'objet, évitant ainsi sa construction et sa destruction.

Déplacement explicite Opération

Une opération de déplacement explicite utilisant std::move force le compilateur à déplacer la propriété d'un objet au lieu de le copier. Ceci est réalisé en passant l'objet comme référence rvalue, puis en appelant std::move sur sa valeur de retour.

Quelle approche utiliser ?

Lors de la sélection entre RVO et explicite, donnez toujours la priorité à l’utilisation du RVO. L'élision de copie est une optimisation du compilateur très efficace qui peut améliorer considérablement les performances.

Comme démontré dans l'extrait de code fourni, la fonction read peut renvoyer un SerialBuffer en utilisant RVO :

SerialBuffer read(size_t size) const
{
    SerialBuffer buffer(size);
    read(begin(buffer), end(buffer));
    return buffer;
}
Copier après la connexion

Par défaut, le compilateur optimisera l'opération de retour, éliminant le besoin de copie si possible.

Les opérations de déplacement explicites ne doivent être utilisées que lorsque RVO ne peut pas être appliquée. Par exemple, si la durée de vie de l'objet s'étend au-delà de l'exécution de la fonction, l'utilisation de std::move peut signaler explicitement l'intention de déplacer la propriété de l'objet. Cependant, cela devrait être un scénario rare et le RVO devrait généralement suffire.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal