了解固定宽度的整数类型

时间:2018-07-04 12:08:31

标签: c++ fixed-size-types

我了解固定宽度类型的概念,但是参考文献提供的解释让我很困惑:

  

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

据我了解,如果我能够编译应用程序,则所有内容都应在能够运行该应用程序的平台上运行。我有问题:

  1. 如果某些平台不支持这些类型怎么办?是使用某种对齐方式还是根本无法使用该应用程序?
  2. 如果我们保证sizeof(char)在每个平台上都是一个字节,而不论字节大小在平台之间可能有所不同,这是否意味着可以保证int8_tuint8_t随处可用?

1 个答案:

答案 0 :(得分:3)

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

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

请注意,如果您不需要知道确切的宽度,还有其他类型可以为用例提供足够的保证,例如int_least8_tint_fast8_t。这些为实现留出了更多的自由,使它们更加可移植。

但是,如果您针对的平台不存在常见的整数类型,则无论如何都应该事先知道;因此,花太多时间解决那些最可能不相关的问题是不值得的。这些平台相对来说比较陌生。