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

Comment dois-je choisir entre le passage par valeur, référence et référence Rvalue en C ?

Mary-Kate Olsen
Libérer: 2024-11-22 04:59:17
original
567 Les gens l'ont consulté

How Should I Choose Between Passing by Value, Reference, and Rvalue Reference in C  ?

Comprendre le passage de paramètres en C

Lors du passage de paramètres en C, la sélection de la méthode appropriée (par valeur, référence ou référence rvalue) garantit l'efficacité et la clarté de la conception du code . Voici les meilleures pratiques pour chaque scénario :

1. Passer par référence Lvalue :

  • Lorsque le paramètre doit être modifié et que ces modifications doivent être visibles par l'appelant.
  • Exemple : void foo(my_class& obj) permet aux modifications au sein de la fonction de refléter les changements dans l'objet d'origine.

2. Passer par la référence Lvalue à Const :

  • Lorsque l'état du paramètre doit seulement être observé, sans aucune modification requise.
  • Exemple : void foo(my_class const& obj) permet d'accéder aux données de l'objet sans altérer son état.

3. Passer par valeur :

  • Pour les types fondamentaux (par exemple, int, bool) ou les types avec copie rapide, cette approche donne la priorité à l'efficacité.
  • Exemple : void foo(my_class obj ) garantit qu'une copie ou un déplacement se produit, selon qu'une lvalue ou une rvalue est réussi.

4. Envisagez une surcharge pour les Lvalues ​​et Rvalues :

  • Pour les objets avec des déplacements coûteux, fournissez des surcharges distinctes pour gérer les lvalues ​​et rvalues.
  • Exemple : Surcharger foo() avec my_class& et ma_classe&& pour gérer respectivement les scénarios de référence lvalue et de référence rvalue.

5. Utiliser Perfect Forwarding :

  • Créez un modèle de fonction qui accepte une référence rvalue à un type non spécifié et le transfère avec std::forward.
  • Exemple : template

Concernant le code fourni :

Passer la carte de crédit comme référence Rvalue :

  • La réclamation de deux les mouvements et zéro copie sont incorrects.
  • Lors du passage d'une rvalue de CreditCard, un seul mouvement se produit lors de la liaison de référence.

Surcharge pour le constructeur :

  • Envisagez de créer des surcharges de constructeur distinctes pour la référence lvalue à CreditCard et la référence rvalue à Carte de crédit.
  • Cette approche garantit une copie pour les lvalues ​​et un déplacement pour les rvalues, améliorant ainsi l'efficacité et répondant à des exigences spécifiques.

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