Pourquoi le retour d'une référence/référence Const est-il nécessaire pour l'opérateur d'affectation de copie ?
En C , l'opérateur d'affectation de copie renvoie généralement une référence ou une référence const à lui-même. Ce choix de conception découle de considérations de performances et évite les copies inutiles.
Considérons l'exemple suivant :
A a1(param); A a2 = a1; A a3; a3 = a2;
Supposons que l'opérateur d'affectation de copie Operator= renvoie une copie du nouvel objet. Dans ce cas, chaque opération d'affectation déclencherait la création d'une copie temporaire et la destruction ultérieure de cette copie après l'affectation.
A a3 = a2; // Creates a temporary copy of a2
Cependant, en renvoyant une référence ou une référence const, l'opération d'affectation devient beaucoup plus efficace. Les données sont copiées directement d'un objet à un autre, sans qu'il soit nécessaire de créer et de détruire des copies temporaires.
A& operator=(const A& a) { /* ... */ } a3 = a2; // Copies data directly from a2 without creating a temporary copy
Renvoyer une référence ou une référence const garantit également que l'opérateur peut être chaîné. Dans l'exemple ci-dessus, l'instruction a = b = c fonctionnerait correctement car l'opérateur d'affectation renvoie une référence à l'objet appelant.
En revanche, si l'opérateur renvoyait une copie, le chaînage ne serait pas possible. L'instruction a = b = c produirait une erreur de compilation car l'affectation de c à a nécessiterait une copie, tandis que l'affectation de b à a créait déjà une copie.
Par conséquent, renvoyer une référence ou une const la référence de l'opérateur d'affectation de copie est essentielle à la fois pour l'exécution et pour l'enchaînement correct de plusieurs affectations.
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!