我希望更好地了解为什么选择 int
而不是 unsigned
?
个人而言,除非有充分的理由,否则我从未喜欢过带符号的值。例如数组中的项数、字符串的长度或内存块的大小等,这些东西通常不可能为负值。这样的值没有任何可能的含义。在这些情况下,为什么更倾向于 int
,因为它在所有这些情况下都是具有误导性的?
我之所以问这个问题是因为Bjarne Stroustrup和Chandler Carruth建议在这里(约在12:30)更倾向于使用int
而不是unsigned
。
我可以理解使用int
而不是short
或long
的论点 - int
是目标机器体系结构最自然的数据宽度。
但是带符号的类型总是让我感到烦恼。在典型的现代CPU体系结构上,带符号的值是否真的更快?是什么使它们更好?
int
而不是unsigned
,因为:1.它更短(我是认真的!),2.它更通用且更直观(例如,我希望假设1-2
等于-1而不是一些晦涩的巨大数字),3.如果我想通过返回一个超出范围的值来表示错误会怎么样? - user529758int
上溢定义为有效行为并使二进制补码强制执行。否则,对于许多现在没有办法绕过unsigned int
的合理任务来说,int
将变得完全无法使用。 - Christian Rau