我应该使用short int
代替int
吗?有什么有用的区别吗?有任何陷阱吗?
答案 0 :(得分:15)
不要打扰short
,除非有一个很好的理由,例如在大量值上保存内存,或者符合其他代码所需的特定内存布局。
使用许多不同的整数类型只会引入复杂性和可能的环绕错误。
在现代计算机上,它也可能引入不必要的低效率。
随时随地洒上const
。
const
限制了可能会发生变化的内容,使得更容易理解代码:你知道这个野兽不会移动,所以,可以忽略,并且思考针对更有用/相关的事情。
正式参数的顶级const
按惯例省略,可能是因为增益不足以超过增加的详细程度。
此外,在函数的纯函数声明中,参数的顶级const
将被编译器忽略。但另一方面,在将纯声明与定义进行比较时,其他一些工具可能不够智能而无法忽略它们,并且有人在早期关于comp.lang.c ++ Usenet组中的问题的辩论中引用了这些工具。所以它在某种程度上取决于工具链,但很高兴我从来没有使用过对那些const
有任何意义的工具。
干杯&第h。,
答案 1 :(得分:9)
绝对不在函数参数中。很少有调用约定会对short和int进行区分。如果您正在创建巨型阵列,则可以使用short
,如果您的数据符合short
以节省内存并提高缓存效率。
答案 2 :(得分:8)
Ben说的。实际上,您将创建效率较低的代码,因为无论何时进行任何比较,所有寄存器都需要去掉高位。除非您需要节省大量内存,否则请使用本机整数。这就是int
的用途。
答案 3 :(得分:1)
问题在技术上是错误的“我应该使用short int
吗?”。唯一的好答案是“我不知道,你想要完成什么?”。
但是让我们考虑一些场景:
有符号整数的范围是:
signed char
- -2⁷ - 2⁷-1 short
- -2¹⁵ - 2¹⁵-1 int
- -2¹⁵ - 2¹⁵-1 long
- -2³¹ - 2³¹-1 long long
- -2⁶³ - 2⁶³-1 我们应该注意这些是保证范围,它们在您的特定实现中可能更大,并且通常是。您也可以保证前一个范围不能大于下一个范围,但它们可以相等。
您很快就会注意到short
和int
实际上具有相同的保证范围。这使你很少有动力使用它。在这种情况下使用short
的唯一原因就是让其他编码人员暗示这些值不会太大,但这可以通过评论来完成。
但是,如果你知道你可以在-128 - 127范围内适应每个潜在值,那么使用signed char
是有意义的。
在这种情况下,您处于相当不利的位置以尝试最小化内存使用,并且应该至少使用int
。虽然它与short
具有相同的最小范围,但在许多平台上它可能更大,这可以帮助你。
但更大的问题是,你正在尝试编写一个操作价值的软件,这个价值范围你不知道。在开始编码之前(当需求被写入时)可能发生了错误。
问问自己,你有多接近边界。如果我们谈论的事情从-1000到+1000并且可能会变为-1500-1500,那么一定要使用short
。具体的架构可以填补你的价值,这意味着你不会节省任何空间,但你不会失去任何东西。但是,如果我们正在处理目前-14000-14000的某些数量,并且可能无法预测地增长(可能是一些财务价值),那么不要只切换到int
,转到long
吧远。你会失去一些记忆,但是在抓住这些翻滚错误时会给你自己带来很多麻烦。
答案 4 :(得分:0)
short vs int - 如果您的数据适合简短,请使用短片。节省内存。让读者更容易知道变量可能适合的数据量。
使用const - 很棒的编程习惯。如果您的数据应该是const,那么将其设为const。当有人读你的代码时,它会非常有用。