在我的代码中,我不使用 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 没有遵守这本书上的建议呢?
size_t
用于表示大小的标准库。如果容器的大小是负数,那将是奇怪的。接口规定了它的行为。我认为这本书假设了日常使用,而不是接口。 - kassakstd::vector<char>
非常重要。而且引用中说“几乎从不”... - Bo Perssonsize_t
,并且使用unsigned int
来表示有符号的ssize_t
,并将其命名为intc
和uintc
,这让我感到困惑,因为通常“u”代表无符号,例如uint32_t
是int32_t
的无符号版本,是一个4字节的整数。因此建议使用更具描述性的名称来避免混淆。 - RastaJedi