Maison > développement back-end > C++ > le corps du texte

Quand devriez-vous utiliser la référence Pass By Value plutôt que Pass By Rvalue ?

DDD
Libérer: 2024-10-24 02:02:30
original
636 Les gens l'ont consulté

When Should You Use Pass By Value vs Pass By Rvalue Reference?

Référence Pass By Value vs Pass By Rvalue

Quand déclarer :

Dans les situations où la fonction nécessite la propriété du paramètre passé, en déclarant la fonction comme :

  • void foo(Widget w); passe par valeur, nécessitant une copie implicite de l'argument passé.
  • void foo(Widget&& w); passe par référence rvalue, permettant des déplacements explicites de l'argument passé.

Différences clés :

1. Contrôle de copie :

  • Passage par valeur : une copie implicite se produit, introduisant potentiellement des coûts supplémentaires.
  • Passage par référence rvalue : des mouvements explicites sont requis pour la construction de la copie, forçant l'appelant pour gérer les copies.

2. Sémantique de l'interface :

  • Paramètre de valeur : La fonction signifie qu'elle souhaite qu'une copie du paramètre soit utilisée.
  • Paramètre de référence Rvalue : La fonction a l'intention de s'approprier l'argument et peut apporter des modifications.

3. Efficacité :

  • Passage par valeur : peut éliminer un seul appel de constructeur de déplacement.
  • Passage par référence rvalue : les optimisations du compilateur peuvent éliminer les copies ou les déplacements du côté de l'appelant.
  • Cependant, les gains d'efficacité peuvent être négligeables lorsque le paramètre transmis n'a pas de membres volumineux ou coûteux.

Implications sur l'interface :

Rvalue les paramètres de référence véhiculent les intentions suivantes :

  • La fonction revendique la propriété de la valeur transmise.
  • La fonction peut modifier la valeur transmise sans affecter la référence de l'appelant.
  • L'appelant renonce à toute propriété et responsabilité concernant la valeur transmise.

En revanche, les paramètres de valeur indiquent que :

  • La fonction opère sur une copie de la valeur transmise.
  • L'appelant conserve la propriété de la valeur transmise et toute modification apportée par la fonction ne l'affecte pas.

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
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!