C++ 了解固定宽度整数类型

C++ 了解固定宽度整数类型,c++,fixed-size-types,C++,Fixed Size Types,我理解固定宽度类型的概念,但我对参考资料提供的解释有点困惑: 带符号整数类型,宽度分别为8、16、32和64位 不带填充位,对负值使用2的补码 (仅当实现直接支持该类型时提供) 据我所知,如果我能够编译一个应用程序,那么一切都应该在能够运行它的平台上工作。以下是我的问题: 如果某些平台不支持这些类型,该怎么办?是否使用了某种对齐方式,或者应用程序是否可以完全不对齐 如果我们保证每个平台上的sizeof(char)正好是一个字节,而不考虑不同平台的字节大小,这是否意味着int8_t和uint8_t

我理解固定宽度类型的概念,但我对参考资料提供的解释有点困惑:

带符号整数类型,宽度分别为8、16、32和64位 不带填充位,对负值使用2的补码 (仅当实现直接支持该类型时提供)

据我所知,如果我能够编译一个应用程序,那么一切都应该在能够运行它的平台上工作。以下是我的问题:

  • 如果某些平台不支持这些类型,该怎么办?是否使用了某种对齐方式,或者应用程序是否可以完全不对齐
  • 如果我们保证每个平台上的
    sizeof(char)
    正好是一个字节,而不考虑不同平台的字节大小,这是否意味着
    int8_t
    uint8_t
    保证在任何地方都可用

  • 如果实现没有提供您使用的类型,那么它将不存在,并且您的代码将无法编译。在这种情况下,需要手动移植

    关于你的第二个问题:虽然我们知道
    sizeof(char)=1
    ,但不能保证
    char
    正好有八位;它可以有更多。如果是这种情况,
    int8\t
    和朋友将不存在

    请注意,如果您不需要知道确切的宽度,那么还有其他类型可以为您的用例提供足够的保证,例如
    int\u least8\u t
    int\u fast8\u t
    。这些使实现更加自由,使它们更加可移植


    但是,如果您的目标平台上不存在常见的整数类型,您应该提前知道这一点;因此,不值得花太多时间来解决那些最可能无关的问题。那些平台相对来说比较奇特。

    我刚刚意识到第二个问题有多愚蠢*8_t与位数相关。:)但可能的情况是什么样的呢?考虑到windows、linux和mac(x86和x64)是否支持这些类型?@kasatata在所有“正常”平台上,所有常见类型都存在。如果您必须针对更奇特的系统,如IBM大型机(
    CHARBIT==9
    iirc)或嵌入式系统,如数码相机,情况可能会有所不同。如果你只对x86平台感兴趣,你就可以使用上面提到的所有类型。缺少8位类型的平台往往是DSP或大型机(也可能是一些小型机),如果您的代码可能是针对这些类型编译的,您应该使用更便携的类型。