首页 > 后端开发 > C++ > 为什么 C/C 中 `size_t` 是无符号的:历史的必然性还是现代的 bug 磁石?

为什么 C/C 中 `size_t` 是无符号的:历史的必然性还是现代的 bug 磁石?

Barbara Streisand
发布: 2024-10-29 07:39:30
原创
327 人浏览过

 Why is `size_t` Unsigned in C/C  : A Historical Necessity or a Modern Bug Magnet?

为什么 size_t 是无符号的?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板