我应该使用size_t还是ssize_t ?

Should I use size_t or ssize_t?

本文关键字:ssize 还是 size 我应该      更新时间:2023-10-16

在我的代码中,我没有使用int或unsigned int。我只使用size_t或ssize_t用于可移植。例如:

typedef size_t intc;    // (instead of unsigned int)
typedef ssize_t uintc;  // (instead of int)

因为strlen, string, vector…都用size_t,所以我通常用size_t。我只使用ssize_t当它可能是负的。

但是我发现:

unsigned integer类型对于将存储视为位数组的应用来说是理想的。使用unsigned而不是int来多获得一位来表示正整数几乎从来都不是一个好主意。通过声明变量unsigned来确保某些值为正的尝试通常会被隐式转换规则打败。

在《c++编程语言》一书中

所以我很困惑。我错了吗?为什么STL不遵守书上的建议?

ssize_t用于函数的返回值可以是有效的大小,也可以是表示错误的负值。它保证能够存储至少在[-1, SSIZE_MAX]范围内的值(SSIZE_MAX是与系统相关的)。

所以当你想返回一个字节大小时,你应该使用size_t,当你想返回一个字节大小或一个(负的)错误值时,你应该使用ssize_t

看:http://pubs.opengroup.org/onlinepubs/007908775/xsh/systypes.h.html

ssize_t不包含在标准中,并且不可移植。在处理对象的大小时应该使用size_t(也有ptrdiff_t,用于指针的差异)。