Файл 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
,