【发布时间】:2013-09-18 16:20:18
【问题描述】:
我想更好地理解为什么选择int 而不是unsigned?
就个人而言,除非有正当理由,否则我从不喜欢带符号的值。例如数组中的项目数,或字符串的长度,或内存块的大小等,所以这些东西通常不可能是负数。这样的值没有可能的意义。当int 在所有这些情况下都具有误导性时,为什么更喜欢它?
我之所以问这个问题是因为 Bjarne Stroustrup 和 Chandler Carruth 都给出了更喜欢 int 而不是 unsigned here (approx 12:30') 的建议。
我可以看到使用 int 而不是 short 或 long 的论点 - int 是目标机器架构的“最自然”数据宽度。
但签过未签一直让我很恼火。在典型的现代 CPU 架构上,有符号值真的更快吗?是什么让他们变得更好?
【问题讨论】:
-
为了现在无法观看 1 小时视频的读者的利益:Stroustrup 和 Carruth 对他们为什么更喜欢签名有何看法?
-
我更喜欢
int而不是unsigned,因为:1. 它更短(我是认真的!),2. 它更通用、更直观(即我喜欢能够假设1 - 2是-1,而不是一些不起眼的巨大数字),3. 如果我想通过返回超出范围的值来表示错误怎么办? -
11:08:“没有简单的指导可以给出”
-
@john 好的,但是他们至少需要使
int溢出定义的行为并强制使用二进制补码。否则,int将无法用于许多合理的任务,而unsigned ints 则无法解决,就像现在一样。 -
@john:在大多数情况下,首选
int而不是unsigned是一回事;从语言中删除unsigned更加激烈。
标签: c++ optimization