Maison >développement back-end >C++ >La valeur transmise devrait-elle être la valeur par défaut dans C 11 pour les objets volumineux ?
Repenser le passage par valeur en C 11
En C traditionnel, le passage de la valeur dans les fonctions entraînait des pénalités de performances pour les gros objets . Par conséquent, les programmeurs C ont opté pour le passage par référence, améliorant la vitesse mais introduisant des complexités dans la propriété et la gestion de la mémoire, en particulier pour les objets alloués par tas.
C 11 a introduit les références Rvalue et les constructeurs de déplacement, permettant un passage par référence efficace. -value pour les objets volumineux comme std :: vector et std :: string. Cela soulève la question de savoir si le passage par valeur devrait devenir la valeur par défaut pour de tels types.
Passage par valeur : une nouvelle valeur par défaut ?
Selon Dave Abrahams, le passage par valeur peut être la valeur par défaut préférée si la copie est nécessaire dans la fonction. En permettant au compilateur de gérer la copie, les programmeurs peuvent éviter les opérations de copie explicites :
void foo(T t) { // ... }
Par rapport au passage par référence :
void foo(T const& t) { auto copy = t; // ... }
Le passage par valeur offre une flexibilité à l'appelant :
T lval; foo(lval); // copy from lvalue foo(T {}); // (potential) move from prvalue foo(std::move(lval)); // (potential) move from xvalue
Exceptions à Pass-by-Value
Bien que le passage par valeur puisse convenir à certains types, le passage par référence à const reste une option raisonnable :
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!