Stroustrup ha detto che C++ dovrebbe essere un linguaggio estensibile, ma non modificabile.
L'operatore punto (accesso attributo) è stato visto come troppo vicino al nucleo della lingua per consentire l'overloading.
Vedere The Design and Evolution of C++, pagina 242, sezione 11.5.2 Riferimenti smart.
Quando ho deciso di permettere il sovraccarico dell'operatore ->
, mi viene spontaneo considerare se operatore .
potrebbe essere simile sovraccarico.
Al momento, ho considerato conclusivi i seguenti argomenti: Se obj
è un oggetto di classe, allora obj.m
ha un significato per ogni membro m
della classe di quell'oggetto. Cerchiamo di non rendere la lingua mutabile ridefinendo le operazioni incorporate (anche se tale regola viene violata per =
per un disperato bisogno e per unario &
).
Se fosse consentito il sovraccarico di .
per una classe X
, non saremmo in grado di accedere ai membri di X
in modo normale; dovremmo usare un puntatore e ->
, ma ->
e &
potrebbero anche essere stati ridefiniti. Volevo un linguaggio estensibile, non mutabile.
Questi argomenti sono importanti, ma non determinanti. In particolare, nel 1990 Jim Adcock propose di consentire il sovraccarico dell'operatore .
esattamente il modo in cui l'operatore è ->
.
"I" in questa citazione è Bjarne Stroustrup. Non puoi essere più autorevole di così.
Se vuoi veramente capire il C++ (come in "perché è così"), dovresti assolutamente leggere questo libro.
Puoi dare un esempio di quando vuoi sovrascrivere il '.' operatore? –
Generalmente, il caso d'uso è "riferimenti intelligenti". Una specie di proxy. – ddaa
@Gamecat: leggi questa proposta (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1671.pdf) per aggiungere la possibilità di sovraccaricare l'operatore '' e 'operatore. *', ha alcuni esempi. – Mankarse