在我的代码中,我不使用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
可能为负的时候才使用它。
但我发现:
无符号整数类型非常适合将存储视为位数组的用途。使用无符号而不是整数来获得更多的位来表示正整数几乎从来都不是一个好主意。通过将变量声明为无符号来确保某些值为正数的尝试通常会被隐式转换规则击败。
在The C++ Programming Language这本书中。
所以我很困惑。我说错了吗?为什么STL不遵守书上的建议?
发布于 2013-04-01 15:50:43
ssize_t
用于返回值可以是有效大小或负值以指示错误的函数。它保证至少能够存储[-1, SSIZE_MAX]
范围内的值(SSIZE_MAX
依赖于系统)。
因此,无论何时返回字节大小,您都应该使用size_t
,而无论何时返回字节大小或(负)错误值,都应该使用ssize_t
。
请参阅:http://pubs.opengroup.org/onlinepubs/007908775/xsh/systypes.h.html
发布于 2013-04-01 15:59:48
ssize_t
不包含在该标准中,并且不可移植。在处理对象的大小时,应该使用size_t
(对于指针差异,也有ptrdiff_t
)。
https://stackoverflow.com/questions/15739490
复制相似问题