Maison > développement back-end > C++ > La valeur de passage devrait-elle être la valeur par défaut pour les gros objets en C moderne ?

La valeur de passage devrait-elle être la valeur par défaut pour les gros objets en C moderne ?

Linda Hamilton
Libérer: 2024-12-10 01:48:13
original
1051 Les gens l'ont consulté

Should Pass-by-Value Be the Default for Large Objects in Modern C  ?

Repenser le passage par valeur en C 11

Dans le monde du C, le passage par valeur a traditionnellement été découragé pour les grandes objets en raison de problèmes de performances. Cependant, l'introduction des références Rvalue et des constructeurs de déplacement dans C 11 ouvre de nouvelles possibilités pour transmettre efficacement des objets.

Le passage par valeur est-il désormais la meilleure valeur par défaut ?

Selon l'expert du secteur Dave Abrahams, il est raisonnable de transmettre des objets volumineux comme std::vector et std::string par valeur si vous devez en faire une copie dans le corps de la fonction. Cela permet au compilateur d'effectuer une optimisation, éliminant ainsi le besoin de copie explicite par le programmeur.

Avantages :

  • Seul un travail minimal est effectué pour lvalue et arguments prvalue.
  • Simplifie la syntaxe de l'appelant, permettant le passage par référence, le passage par prvalue et pass-by-xvalue.

Objets personnalisés :

Pour les objets personnalisés, le passage par référence à const est toujours une option viable, car il fournit flexibilité et minimise le risque de modification involontaire de l'objet d'origine.

Meilleur Pratiques :

  • Transmettez les objets par valeur si vous devez en faire une copie dans la fonction.
  • Utilisez les références Rvalue uniquement lorsque cela est nécessaire pour optimiser la sémantique de déplacement.
  • Envisagez le passage par référence à const pour les objets personnalisés afin de garantir l'immuabilité et la propriété clarté.

Exemple :

Pour implémenter le modèle recommandé, les constructeurs valorisés peuvent être écrits comme suit :

class T {
    U u;
    V v;
public:
    T(U u, V v)
        : u(std::move(u))
        , v(std::move(v))
    {}
};
Copier après la connexion

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