108

在我的代码中,我不使用 int 或 unsigned int。我只将 size_t 或 ssize_t 用于便携式。例如:

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

因为strlen,,……都用string,所以我一般都用。我只在它可能是负面的时候使用。vectorsize_tsize_tssize_t

但我发现:

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

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

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

4

2 回答 2

179

ssize_t用于返回值可以是有效大小或负值以指示错误的函数。保证至少能够在范围内存储值[-1, SSIZE_MAX]SSIZE_MAX取决于系统)。

因此,只要您打算返回size_t以字节为单位的大小,并且ssize_t无论何时要返回以字节为单位的大小或(负)错误值,都应该使用。

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

于 2013-04-01T07:50:43.357 回答
34

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

于 2013-04-01T07:59:48.483 回答