C++ 文件读取()常量正确性

C++ 文件读取()常量正确性,c++,constants,C++,Constants,假设我正在编写一个类来包装windows的文件句柄,以提供轻松读取/写入文件的功能。该类有一个名为readbuffer&out的函数,用于从文件中读取数据 问题是,read是否需要常量 一方面,它应该是const,因为它不会更改文件。 另一方面,它不应该是常量,因为它将句柄更改为显示读取位置的文件的句柄 你觉得怎么样?不是常数。修改文件句柄位置 听起来您的类(我称之为FileAccessor)正在有效地协调文件上的操作。假设您想让一个函数实现一些处理文件的算法,它想通过调用output\u di

假设我正在编写一个类来包装windows的文件句柄,以提供轻松读取/写入文件的功能。该类有一个名为readbuffer&out的函数,用于从文件中读取数据

问题是,read是否需要常量

一方面,它应该是const,因为它不会更改文件。 另一方面,它不应该是常量,因为它将句柄更改为显示读取位置的文件的句柄


你觉得怎么样?

不是常数。修改文件句柄位置

听起来您的类(我称之为FileAccessor)正在有效地协调文件上的操作。假设您想让一个函数实现一些处理文件的算法,它想通过调用output\u diagnosticsconst FileAccessor&h来显示一些诊断信息,那么它可以合理地显示哪些信息,而不会干扰调用output\u diagnostics的算法?它可能会输出文件中的当前位置/字节偏移量。获取该位置的函数应为const。可能还有其他事情,比如文件是否以某种方式被锁定,文件大小或文件系统路径——所有这些看起来都是公平的。但是,如果它从文件中读取数据,它就修改了调用output_diagnostic的算法所期望的内容,如果它以后执行读取、从当前位置截断以及所有其他操作,那么读取函数就不应该是常量。

赫伯·萨特几年前在演讲中说,对于C++11,const表示线程安全。所以问题是,在没有任何客户端锁定的情况下,安全地从两个线程同时调用read吗?我怀疑答案是否定的,所以函数不应该是常量。