这可能是一个C ++ 101问题:我很好奇使用size_t
和offset_t
的准则是什么,例如他们打算用于什么情况,他们不打算用于什么情况等等。我没有做过很多可移植编程,所以我通常只使用像int
或unsigned int
这样的数组大小,索引等。但是,我认为最好在可能的情况下使用其中一些更标准的typedef,所以我想知道如何正确地做到这一点。
作为后续问题,对于使用Visual Studio 2008在Windows上进行开发,我应该在哪里查找实际的typedef?我发现VS安装目录中的许多标题中都定义了size_t
,因此我不确定应该使用哪些标题,而且我无法在任何地方找到offset_t
。
答案 0 :(得分:12)
您可能指的是off_t
,而不是offset_t
。 off_t
是POSIX类型,而不是C类型,它用于表示文件偏移(即使在32位系统上也允许64位文件偏移)。 C99取代了fpos_t
。
size_t
用于计算字节或数组元素。它匹配地址空间。
答案 1 :(得分:3)
而不是offset_t
你的意思是ptrdiff_t
吗?这是std::distance
等例程返回的类型。我的理解是size_t
是无符号的(以匹配前面提到的地址空间)而ptrdiff_t
是有符号的(理论上表示指针之间的“向后”距离,尽管这很少使用)。
答案 2 :(得分:1)
offset_t
。
size_t
仅表示对象或数组大小。保证size_t
足够大以存储任何内存中对象的大小,因此应该使用它。
答案 3 :(得分:1)
只要C ++语言规范指出它在特定表达式中使用,就使用size_t
。例如,您使用size_t
来存储sizeof
的返回值,或者表示数组中元素的数量(new[]
需要size_t
)。
我不知道offset_t
是什么 - 在ISO C ++规范中没有提到过一次。
答案 4 :(得分:0)
将一个旧版本拖回来... offset_t(这是一个很长的版本)被Solaris&#39; llseek()系统调用,可用于任何可能遇到真正的64位文件偏移的地方......这意味着您正在使用真正巨大的文件。< / p>