在我的代码中,我不使用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
时可能是否定的。
但我发现:
无符号整数类型非常适合将存储视为位数组的用途。 使用无符号而不是int来再获得一位来表示正整数几乎不是一个好主意。 尝试通过声明无符号变量来确保某些值为正值通常会被隐式转换规则所取代。
在书中The C++ Programming Language。
所以我很困惑。我错了吗?为什么STL不遵守书中的建议?
答案 0 :(得分:116)
ssize_t
用于返回值可以是有效大小的函数,也可以用于指示错误的负值。
保证能够存储至少在[-1, SSIZE_MAX]
范围内的值(SSIZE_MAX
取决于系统)。
因此,无论何时返回大小(以字节为单位),都应使用size_t
;每当返回大小(以字节为单位)或(负)错误值时,都应使用ssize_t
。
请参阅: http://pubs.opengroup.org/onlinepubs/007908775/xsh/systypes.h.html
答案 1 :(得分:25)
ssize_t
未包含在标准中且不可移植。处理对象大小时应使用size_t
(对于指针差异,也有ptrdiff_t
。)