在 谷歌 C + + 风格指南中,关于“无符号整数”的主题,建议
由于历史原因,C + + 标准还使用无符号整数来表示容器的大小——标准机构的许多成员认为这是一个错误,但在这一点上实际上是不可能修复的。事实上,无符号算法并不建模一个简单整数的行为,而是由标准来定义建模同余关系(包围在溢出/下溢上) ,这意味着编译器无法诊断出一类重要的错误。
同余关系有什么问题? 这难道不是无符号 int 的预期行为吗?
指南中提到了什么类型的 bug (一个重要的类) ? 溢出的 bug?
不要仅仅使用无符号类型来断言变量是非负的。
我之所以考虑在无符号整型上使用有符号整型,是因为如果它确实溢出(变为负值) ,就更容易检测到。