应该使用size_t或ssize_t

时间:2013-04-01 07:34:37

标签: c++ unsigned signed size-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时可能是否定的。

但我发现:

  

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

在书中The C++ Programming Language

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

2 个答案:

答案 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。)