C++ 解释为什么在c+中int优先于long/short+;?

C++ 解释为什么在c+中int优先于long/short+;?,c++,performance,operating-system,types,int,C++,Performance,Operating System,Types,Int,我在某个地方读到,int数据类型提供了更好的性能(与long和short相比),无论操作系统大小如何,因为它的大小会根据操作系统的字大小进行修改。其中长和短分别占用4和2个字节,这可能与操作系统的字大小相匹配,也可能与操作系统的字大小不匹配。 有人能给我一个很好的解释吗 只优化存储大小;如果适用,计算总是扩展到int(即,除非short的大小已经相同) 不确定int应该优先于long;最明显的情况是int的容量不够 您已经提到了本机字号,因此我将从标准中保留该字号: 3.9.1,§2: 有五种带

我在某个地方读到,int数据类型提供了更好的性能(与long和short相比),无论操作系统大小如何,因为它的大小会根据操作系统的字大小进行修改。其中长和短分别占用4和2个字节,这可能与操作系统的字大小相匹配,也可能与操作系统的字大小不匹配。 有人能给我一个很好的解释吗

  • 只优化存储大小;如果适用,计算总是扩展到int(即,除非short的大小已经相同)

  • 不确定int应该优先于long;最明显的情况是int的容量不够

  • 您已经提到了本机字号,因此我将从标准中保留该字号:
    3.9.1,§2:

    有五种带符号整数类型: “签名字符”、“短整数”、“整数”, “长整型”和“长整型”。在里面 此列表中,每种类型至少提供 和前面的一样多的存储空间 在名单上。普通INT具有 建议的自然尺寸 执行架构 环境(44);另一个签名 提供整数类型以满足 特殊需要


    因此,您可以说char
    int
    传统上是运行程序的机器最“自然”的整数类型。“最自然”的含义还不太清楚,但我希望它不会比其他类型慢。也许更重要的是,在没有充分理由不这样做的情况下,使用
    int
    优先于其他类型几乎是一种普遍的传统。使用其他的积分类型会导致有经验的C++程序员在读取代码时问为什么。

    < P >爱斯基摩人用四十个或更多不同的单词来表示雪。当你只想说是雪的时候,“雪”这个词就足够了。源代码不是关于指导编译器的:它是关于人与人之间的通信,即使通信可能只在您当前和稍后的自我之间


    Cheers&hth.

    int
    的性能并不比其他类型更好。实际上,在大多数现代平台上,除了
    long
    之外,所有整数类型的性能都是相似的。如果你想在你的平台上提供“最快”的整数,C++就不给你一个方法。p> 另一方面,如果您愿意使用C99定义的东西,您可以使用其中定义的“禁食”类型之一

    此外,在现代机器上,在大多数情况下,内存层次结构比CPU计算更重要。使用较小的整数类型可以将更多的整数放入CPU缓存,这将在几乎所有情况下提高性能

    最后,我建议不要使用
    int
    作为默认数据类型。通常,当人们真正想要一个无符号整数时,我会看到他们想要
    int
    。从有符号到无符号的转换可能会导致微妙的整数溢出错误,从而导致安全漏洞


    不要因为固有的“速度”而选择数据类型--选择正确的数据类型来解决您要解决的问题。

    看一看:我曾在一些8位微控制器上工作过,其中首选
    char
    type,因为
    char
    type在这些平台上分配为8位,8位计算比
    int
    s便宜,这是16位。如果有人能告诉我为什么在64位cpu(至少x86-64)上,gcc使用long来匹配字长,而int只有32位,我会很感兴趣。我不同意这一点-源代码是用来编写程序的,其中包括指令编译器。@Sharptoth:指令编译器只是其中的一小部分。如果这是主要的事情,那么你会使用汇编语言。相反,我们使用C++等语言来抽象事物,主要活动是选择好的抽象、抽象,便于别人理解(或稍后再自己)。Cheers&hth.,:-)虽然你可以看出短字符至少是2个字节,等等,这符合ISO C的限制。h,它定义了实际的最小限制(
    它们的实现定义值应等于或大于所示值的大小(绝对值),带有相同的符号。
    )”如果你想要“最快的”“在你的平台上可用的整数,C++没有给你一个方法来做这件事”,但我记得[Stn.t]在C99和C++ C++中:+)1。我还补充说,使用<代码> int >代码>的大部分时间会导致一个有经验的C++程序员在读取代码时问为什么没有使用任何其他类型的原因。询问为什么选择一个类型是C++程序员的一个非常常见的消遣。