应该使用 size_t 或 ssize_t

在我的代码中,我不使用 int 或 unsignedint。对于可移植性,我只使用 size _ t 或 ssize _ t。例如:

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

因为 strlenstringvector... 都使用 size_t,所以我通常使用 size_t。而且我只在 ssize_t可能是阴性的时候使用它。

但我发现:

无符号整数类型非常适合将存储视为位数组的使用。 使用无符号代替 int 来获得更多的位来表示正整数几乎从来都不是一个好主意。 通过声明未签名的变量来确保某些值为正值的尝试通常会被隐式转换规则挫败。

C++程式语言这本书里。

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

123959 次浏览

ssize_t is used for functions whose return value could either be a valid size, or a negative value to indicate an error. It is guaranteed to be able to store values at least in the range [-1, SSIZE_MAX] (SSIZE_MAX is system-dependent).

So you should use size_t whenever you mean to return a size in bytes, and ssize_t whenever you would return either a size in bytes or a (negative) error value.

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

ssize_t is not included in the standard and isn't portable. size_t should be used when handling the size of objects (there's ptrdiff_t too, for pointer differences).