Bjarne Stroustrup 的观察结果是“使用 unsigned 而不是 int 来多获得一位来表示正整数几乎从来都不是一个好主意”引起了人们对将 size_t 设置为无符号的决定的担忧。
最初,将 size_t 设置为无符号是为了适应具有 16 位指针的体系结构,例如 DOS 系统。为了防止字符串大小限制,C 标准强制要求 ptrdiff_t(size_t 的有符号副本)实际上为 17 位。
虽然这些历史原因可能仍然适用于嵌入式系统,对于现代 32 位和 64 位编程来说,情况就不那么重要了。在这些环境中,对数字使用无符号类型没有实际优势,并且由于 C/C 隐式转换规则(例如,其中 string("Hi").length()
将 size_t 设置为无符号的决定不是一个错误,而是针对当时有限系统的实际选择。然而,在现代编程实践中,通常建议尽量减少在接口和数字中使用无符号整数,除非 typedef int MyType 的自描述性是有益的特定情况。
以上是为什么 C/C 中 `size_t` 是无符号的:历史的必然性还是现代的 bug 磁石?的详细内容。更多信息请关注PHP中文网其他相关文章!