`short int` vs`int`

时间:2010-12-14 23:22:39

标签: c++ standards

我应该使用short int代替int吗?有什么有用的区别吗?有任何陷阱吗?

5 个答案:

答案 0 :(得分:15)

short vs int

不要打扰short,除非有一个很好的理由,例如在大量值上保存内存,或者符合其他代码所需的特定内存布局。

使用许多不同的整数类型只会引入复杂性和可能的​​环绕错误。

在现代计算机上,它也可能引入不必要的低效率。

常量

随时随地洒上const

const限制了可能会发生变化的内容,使得更容易理解代码:你知道这个野兽不会移动,所以,可以忽略,并且思考针对更有用/相关的事情。

正式参数的顶级const按惯例省略,可能是因为增益不足以超过增加的详细程度。

此外,在函数的纯函数声明中,参数的顶级const将被编译器忽略。但另一方面,在将纯声明与定义进行比较时,其他一些工具可能不够智能而无法忽略它们,并且有人在早期关于comp.lang.c ++ Usenet组中的问题的辩论中引用了这些工具。所以它在某种程度上取决于工具链,但很高兴我从来没有使用过对那些const有任何意义的工具。

干杯&第h。,

答案 1 :(得分:9)

绝对不在函数参数中。很少有调用约定会对short和int进行区分。如果您正在创建巨型阵列,则可以使用short,如果您的数据符合short以节省内存并提高缓存效率。

答案 2 :(得分:8)

Ben说的。实际上,您将创建效率较低的代码,因为无论何时进行任何比较,所有寄存器都需要去掉高位。除非您需要节省大量内存,否则请使用本机整数。这就是int的用途。

编辑:甚至没有看到关于const的子问题。在内部类型(int,float)上使用const是没用的,但是只要适用,任何指针/引用都应该绝对是const。类方法也是如此。

答案 3 :(得分:1)

问题在技术上是错误的“我应该使用short int吗?”。唯一的好答案是“我不知道,你想要完成什么?”。

但是让我们考虑一些场景:

  1. 知道您的变量可以采用的确定值范围。
  2. 有符号整数的范围是:

    • signed char - -2⁷ - 2⁷-1
    • short - -2¹⁵ - 2¹⁵-1
    • int - -2¹⁵ - 2¹⁵-1
    • long - -2³¹ - 2³¹-1
    • long long - -2⁶³ - 2⁶³-1

    我们应该注意这些是保证范围,它们在您的特定实现中可能更大,并且通常是。您也可以保证前一个范围不能大于下一个范围,但它们可以相等。

    您很快就会注意到shortint实际上具有相同的保证范围。这使你很少有动力使用它。在这种情况下使用short的唯一原因就是让其他编码人员暗示这些值不会太大,但这可以通过评论来完成。

    但是,如果你知道你可以在-128 - 127范围内适应每个潜在值,那么使用signed char是有意义的。

    1. 您不知道潜在值的确切范围。
    2. 在这种情况下,您处于相当不利的位置以尝试最小化内存使用,并且应该至少使用int。虽然它与short具有相同的最小范围,但在许多平台上它可能更大,这可以帮助你。

      但更大的问题是,你正在尝试编写一个操作价值的软件,这个价值范围你不知道。在开始编码之前(当需求被写入时)可能发生了错误。

      1. 您对该范围有所了解,但意识到它可能会在未来发生变化。
      2. 问问自己,你有多接近边界。如果我们谈论的事情从-1000到+1000并且可能会变为-1500-1500,那么一定要使用short。具体的架构可以填补你的价值,这意味着你不会节省任何空间,但你不会失去任何东西。但是,如果我们正在处理目前-14000-14000的某些数量,并且可能无法预测地增长(可能是一些财务价值),那么不要只切换到int,转到long吧远。你会失去一些记忆,但是在抓住这些翻滚错误时会给你自己带来很多麻烦。

答案 4 :(得分:0)

short vs int - 如果您的数据适合简短,请使用短片。节省内存。让读者更容易知道变量可能适合的数据量。

使用const - 很棒的编程习惯。如果您的数据应该是const,那么将其设为const。当有人读你的代码时,它会非常有用。