用于存储文件中字符索引的典型类型是什么?我目前正在使用long unsigned int
,但这有意义吗?我应该使用std::size_t
代替,还是更不合理呢?
答案 0 :(得分:4)
std::streampos
是表示字符流(包括文件)中位置的标准类型。
答案 1 :(得分:2)
文件的大小(以字节为单位)在struct stat中定义为long;在64位平台上,size_t可能总是定义为64位数字,32位作为32位数字等;除非你使用奇怪的编译器。
我会坚持到底。 std :: size是特定于语言的,我倾向于在这里使用特定于操作的类型。但同样,我认为使用std :: size_t也没问题
答案 2 :(得分:2)
正如Mike Seymor所说,如果你使用C ++ io流,std :: streampos是表示文件位置的标准类型。参见
http://www.cplusplus.com/reference/iostream/streampos/
请注意,std :: size_t可能不正确。例如,在32位系统上,std :: size_t将是32位无符号整数,而系统可能支持大于2 ^ 32字节= 4 GB的文件。
FWIW,在POSIX世界中,有一个(带符号)整数类型off_t,用于表示文件大小和偏移量。使用各种宏(例如Linux上的_FILE_OFFSET_BITS = 64),可以将off_t重新定义为64位类型。
答案 3 :(得分:0)
如果你在谈论ASCII字符,它们的值不会超过127.因此,使用unsigned char数据类型就足够了。
答案 4 :(得分:0)
你想要以某种方式表示“无效索引”吗?如果是这样,为什么不使用ssize_t
。