Selon ma compréhension, C++ ne vous permet pas de réinstaller une référence. En d'autres termes, vous ne pouvez pas modifier l'objet auquel une référence se réfère. C'est comme un pointeur constant à cet égard (par exemple int* const a = 3;
).Exemple de code qui tente de réinstaller une référence de manière incorrecte
Dans certains code, je regardais aujourd'hui, je vu ce qui suit:
CMyObject& object = ObjectA().myObject();
// ...
object = ObjectB().myObject();
immédiatement mes sonnette d'alarme se déclenche sur la dernière ligne de code ci-dessus. Le code n'essayait-il pas de réinstaller une référence? Pourtant, le code a été compilé.
Alors je compris que ce que le code a été fait invoquait simplement l'opérateur d'affectation (à savoir operator=
) à réattribuer « objet interne à ObjectB
» ObjectA
objet interne. La référence object
se référait toujours à ObjectA
, c'est juste que le contenu de ObjectA
correspondait maintenant à celui de ObjectB
. Ma compréhension est que le compilateur générera toujours un opérateur d'assignation par défaut si vous n'en fournissez pas un, qui fait une copie superficielle (similaire au constructeur de copie par défaut). Comme une référence est typée (tout comme l'objet sous-jacent auquel elle fait référence), cela ne signifie-t-il pas que nous invoquerons toujours l'opérateur d'affectation lors de la réinstallation d'une référence, empêchant ainsi le compilateur de se plaindre de ce?
Je me suis creusé la tête en essayant de trouver une ligne de code illégale qui essaierait incorrectement de réinstaller une référence, pour que le compilateur se plaigne.
Quelqu'un peut-il me diriger vers un exemple d'un tel code?
Oui, c'est bon! Merci. – LeopardSkinPillBoxHat