lectura de archivo () const.

Supongamos que estoy escribiendo una clase para envolver el HANDLE del archivo de Windows para dar funcionalidad a la lectura / escritura de archivos fácilmente. La clase tiene una función llamada read(buffer& out) que lee datos del archivo.

La pregunta es, ¿necesita read() ser const o no?

Por un lado, debe ser const porque no cambia el archivo. Por otro lado, no debería ser const porque cambia la MANIJA (la MANIJA al archivo que muestra dónde leer).

¿Qué piensas?

No const. Modifica la posición del manejador de archivos.

Suena como si tu clase, lo llamaré FileAccessor , esté orquestando efectivamente las operaciones en el archivo. Supongamos que desea que una función implemente algún algoritmo que procesa el archivo y desea mostrar información de diagnóstico llamando a output_diagnostics(const FileAccessor& h) , ¿qué información podría mostrarse de manera razonable que no pudiera interferir con el algoritmo que llama output_diagnostics ? Quizás podría generar la posición actual / desplazamiento de bytes en el archivo. Una función para obtener esa posición debe ser const . Puede haber otras cosas, como si el archivo está bloqueado de alguna manera, el tamaño del archivo o la ruta del sistema de archivos, todo parece correcto para hacer const . Pero, si realiza una read del archivo, está modificando lo que el algoritmo que llama output_diagnostic puede esperar si posteriormente realiza una read , un “truncado desde la posición actual” y cualquier otra forma de otras operaciones, y por esa razón la función de read no debería ser const .