应该使用size_t或者ssize_t

在我的代码中,我不使用int或unsigned int。 我只使用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可能是负数时才使用。

但是我发现:

无符号整数types非常适合将存储器视为位数组的用途。 使用unsigned而不是int来获得更多的位来表示正整数几乎不是一个好主意。 尝试通过声明variables无符号来确保某些值是正值将通常被隐式转换规则所破坏。

在“C ++编程语言 ”一书中。

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

ssize_t用于返回值可以是有效大小的函数,或者用于指示错误的负值。 保证能够存储至less在[-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 )。