Файл read() const правильность

Предположим, я пишу класс, чтобы обернуть файл Windows HANDLE, чтобы дать возможность легко читать / писать из файлов. У класса есть функции, называемые read(buffer& out) который читает данные из файла.

Вопрос в том, read() нужно быть const или нет?

С одной стороны, это должно быть const потому что это не меняет файл. С другой стороны, это не должно быть const потому что он меняет РУЧКУ (РУЧКУ на файл, который показывает, где читать).

Как вы думаете?

2 ответа

Решение

Не постоянный Изменяет позицию дескриптора файла.

Похоже, ваш класс - я назову это FileAccessor - эффективно координирует операции над файлом. Скажем, вы хотите иметь функцию, реализующую некоторый алгоритм, обрабатывающий файл, и она хочет отобразить некоторую диагностическую информацию, вызвав output_diagnostics(const FileAccessor& h)какую информацию он может разумно отобразить, что не может помешать вызову алгоритма output_diagnostics? Возможно, он может вывести текущую позицию / байтовое смещение в файле. Функция для получения этой позиции должна быть const, Могут быть и другие вещи, например, заблокирован ли файл каким-либо образом, размер файла или путь к файловой системе - все это кажется справедливым const, Но если это read из файла это модифицирует то, что вызывает алгоритм output_diagnostic можно ожидать, если это позже сделать read"усечение с текущей позиции" и все виды других операций, и по этой причине read функция не должна быть const,

Другие вопросы по тегам