小编jce*_*ed2的帖子

为什么 C++ 标准会按照它的方式处理文件?

C++ 使用该streamoff类型来表示(文件)流中的偏移量,并在 [stream.types] 中定义如下:

using streamoff = implementation-defined ;

类型 streamoff 是有符号基本整数类型之一的同义词,其大小足以表示操作系统的最大可能文件大小。287)

287) 通常很长很长。

这是有道理的,因为它允许在大文件中查找(而不是使用long可能只有 32 位宽的 )。

[filebuf.virtuals] 定义了basic_filebuf在文件中查找的函数,如下所示:

pos_type seekoff(off_type off, ios_base::seekdir way, ios_base::openmode which = ios_base::in | ios_base::out) override;

off_type等价于streamoff,参见 [iostreams.limits.pos]。然而,标准接着解释了函数的效果。我被最后一句话激怒了,它需要调用fseek

效果:让width表示a_codecvt.encoding()。如果is_open() == false, 或off != 0 && width <= 0,则定位操作失败。否则,如果way != basic_ios::curoff != 0,并且如果最后一个操作是输出,则更新输出序列并写入任何非移位序列。接下来,寻找新的位置:如果width > 0,调用fseek(file, width * off, …

c++ file seek language-lawyer c++20

17
推荐指数
1
解决办法
595
查看次数

标签 统计

c++ ×1

c++20 ×1

file ×1

language-lawyer ×1

seek ×1