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