Maison >développement back-end >C++ >Le passage par valeur devrait-il être la valeur par défaut pour les types de valeur en C 11 ?
Pass-by-Value en C 11 : une réévaluation
En C 11, l'introduction des références rvalue et des constructeurs de déplacement a déclenché un débat : le passage par valeur devrait-il devenir la valeur par défaut pour les types valeur ?
Origines de Pass-by-Reference
Historiquement, passer des objets volumineux par valeur en C était inefficace en raison d'une copie inutile. Les paramètres de référence ont été privilégiés pour éviter une duplication coûteuse. Cependant, les références ont introduit des complexités dans la propriété et la gestion de la mémoire, en particulier pour les objets alloués au tas.
Le nouveau paradigme en C 11
Avec les références rvalue et les constructeurs de déplacement, il Il est désormais possible d'implémenter des types de valeur comme std::vector et std::string qui sont peu coûteux à transmettre par valeur. Cela soulève la question : le passage par valeur devrait-il être la nouvelle norme pour ces types ?
Recommandations
Selon Dave Abrahams, le passage par valeur est recommandé si un une copie est requise dans la fonction. Cela permet au compilateur d'optimiser la copie, comme le montre l'exemple suivant :
void foo(T t) { // ... }
Cela peut être utilisé de manière flexible pour transmettre des valeurs l, prvalues ou xvalues :
T lval; foo(lval); // copy from lvalue foo(T {}); // (potential) move from prvalue foo(std::move(lval)); // (potential) move from xvalue
Exceptions
Le passage par référence à const reste une option raisonnable pour certains scénarios où une copie est inutile ou indésirable. Dans de tels cas, la syntaxe suivante peut être utilisée :
class T { U u; V v; public: T(U u, V v) : u(std::move(u)) , v(std::move(v)) {} };
Conclusion
En C 11, le passage par valeur est une option intéressante pour les types valeur qui nécessitent une copie dans les fonctions. Il simplifie la gestion des paramètres et permet des opérations de déplacement efficaces. Cependant, le passage par référence à const reste une alternative appropriée dans les cas où une copie n'est pas requise.
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!