【发布时间】:2012-04-27 10:13:31
【问题描述】:
Bjarne Stroustrup 在 C++ 编程语言中写道:
无符号整数类型非常适合将存储视为 位数组。使用无符号而不是 int 来获得更多位 表示正整数几乎从来都不是一个好主意。尝试去 通过声明变量无符号来确保某些值是正数 通常会被隐式转换规则打败。
size_t 似乎是无符号的“以获得更多位来表示正整数”。那么这是一个错误(或权衡)吗?如果是,我们是否应该尽量减少在我们自己的代码中使用它?
Scott Meyers 的另一篇相关文章是here。总而言之,他建议不要使用无符号接口,无论该值是否始终为正。换句话说,即使负值没有意义,也不一定要使用无符号。
【问题讨论】:
-
为什么不签名会是一个“错误”?
-
@Nicol:因为它是一个在接口中使用的无符号,Meyers 建议不要这样做,而且 Stroustrup 似乎在上面的引用中说这不是一个好主意。
-
阿尔夫的回答看起来可能是正确的。人们倾向于使用 size_t 既是标准的又是无符号的这一事实,因此他们应该在自己的代码中使用 size_t 或无符号类型。如果答案是“size_t 由于历史原因未签名”之类的,那么这会稍微减少这种理由。
-
请注意,Stroustrup 没有创建 C。在早期,空间/性能优化非常重要,否则大多数人永远不会停止在汇编中编码。
-
Herb Sutter youtu.be/Puio5dly9N8?t=2660 的相关引用:“使用 int 除非你需要不同的东西,然后仍然使用有符号的东西,直到你真的需要不同的东西,然后诉诸无符号的。是的,不幸的是我们在 STL 和标准库中使用无符号索引的错误。”
标签: c++ unsigned-integer size-t