Lettura dei dati da file e const

2

È ragionevole lasciare che un metodo di lettura su un oggetto file sia const? Ad esempio

size_t read(void* buffer,size_t length) const;

Il metodo di lettura non modifica il contenuto del file, ma aggiorna il puntatore del file che è invisibile dietro un handle.

    
posta user877329 28.08.2012 - 15:18
fonte

1 risposta

1

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.

    
risposta data 28.08.2012 - 16:35
fonte

Leggi altre domande sui tag