Sebbene il metodo read
non cambi lo stato visibile del suo oggetto, fa cambia lo stato visibile del mondo esterno (l'handle del file), e quindi non dovrebbe essere dichiarato const . Ecco perché.
Contrassegnare un metodo const ha due significati: uno per il programmatore e uno diverso per il compilatore.
-
Per il programmatore, const dice questo metodo è idempotente . Posso chiamarlo tutte le volte che voglio e non apportare modifiche nello stato visibile di questo oggetto, dei suoi collaboratori o del mondo esterno. Non ha effetti collaterali visibili.
-
Al compilatore const significa questo metodo non modifica lo stato di questo oggetto .
A tal fine, contrassegni un metodo come const se soddisfa la definizione dei programmatori di non avere effetti collaterali visibili. La definizione del compilatore di const è semplicemente uno strumento che il compilatore può usare per verificare se il metodo è idempotente.
La parola chiave mutabile , che usi per dire al compilatore che questo pezzo di uno stato di un oggetto può essere cambiato e non ha effetti collaterali visibili, è sia uno strumento usato per adattare la comprensione del compilatore di const
alla definizione del programmatore e provare che le due definizioni non sono le stesse.