【发布时间】:2015-08-04 09:19:13
【问题描述】:
我在看this video。 Bjarne Stroustrup 表示 unsigned ints 容易出错并导致错误。因此,您应该只在真正需要它们时才使用它们。我还阅读了有关 StackOverflow 的一个问题(但我不记得是哪一个),使用 unsigned ints 会导致安全错误。
它们如何导致安全漏洞?有人可以通过给出一个合适的例子来清楚地解释它吗?
【问题讨论】:
-
我强烈主张使用无符号类型。如果你得到错误的循环条件,你就是一个糟糕的开发者。让它与无符号整数一起工作是非常简单的数学运算,对我来说,数量是无符号的感觉更自然
-
问题是大多数开发人员都很糟糕......
-
他们当然可以放大一个错误。考虑奖励一个人 $2^32-1$ 美分的 VLT。 thestar.com/news/ontario/2009/03/18/… 当然,有符号数也有类似的问题,最小的距离最大的只有一个,但由于我们经常在 0 附近玩,所以无符号数更接近悬崖边缘。
-
有符号整数也容易出错。当移动“字节”值产生奇怪的结果时,我花了一个小时在 Java 中调试一个问题。这是由于促销和标志延期。我宁愿两者兼得,并为工作选择正确的类型。
-
@MattiVirkkunen:除了有符号和无符号之外,我宁愿拥有具有显式包装语义、显式检查语义、松散 mod 2ⁿ 语义和溢出等于 UB 语义的类型。分离出不同种类的整数可以编写出比目前可用的类型和与之相关的规则更可移植、更健壮和更优化的代码[在许多情况下需要更小的有符号类型来使用干净的包装语义,但允许对较小的无符号类型进行数学运算以生成未定义的行为]。
标签: c++ unsigned-integer