【问题标题】:Is int guaranteed to be 32 bits on each platform supported by Qt, or only qint32?在 Qt 支持的每个平台上,int 是否保证为 32 位,还是只有 qint32?
【发布时间】:2011-03-06 11:05:05
【问题描述】:

我记得在某处读到 Qt 在支持的平台上保证某些数据类型的大小。是不是int 到处都是至少 32 位,而qint32 到处都是完全 32 位?还是别的什么?

C++ 保证 int 至少为 16 位,并且一些 Qt 结构,如 QRectQPoint 在内部使用 int。我正在开发一个应用程序,其中这些类型需要 32 位,我不想复制它们的功能,所以我可以使用更大的类型。

【问题讨论】:

    标签: c++ qt types size int


    【解决方案1】:

    整数类型的大小取决于编译器。我认为不能保证普通的int 具有精确的大小。但是您可以通过将此行添加到 main() 的开头来确保您知道这不是您想要的:

    if(sizeof(int) != 4) {
      throw std::runtime_error("int is not 32-bit");
    }
    

    【讨论】:

    • 好的,但是,QtGlobal 定义了几个 typedef。例如,qint32 的文档说“Typedef for signed int。这种类型保证在 Qt 支持的所有平台上都是 32 位的。”。所以这意味着int在所有支持的平台上也必须保证是32位的?
    • 我不会得出这个结论。该文档保证 qint32 在所有支持的平台上都是 32 位大小,而不是相反。如果他们将来必须支持 int 不是 32 位的平台,他们将更改该平台的 typedef 以反映这一点。由于它现在已实现,您可以假设 Qt 支持的所有平台都具有 32 位 int。但是假设是非常邪恶的事情。
    • qint32 和朋友们的目的是提供一种有保证的签名和大小的类型。如果标准类型能够提供这一点,则不需要那些 Qt typedef ;) 我猜 Qt 文档在这里措辞含糊。
    • 您无法通过使用sizeof 检查其大小来知道int 中有多少位。见stackoverflow.com/q/271076/95735
    • @Piotr:你打算在Qt支持的每个平台上测试它吗?祝你好运!
    【解决方案2】:

    据我所知,虽然 int 不是 32 位在技术上是可能的,但我从未见过一个平台不是。想象一下——char、8bits、short、16bits、int、.. 24bits?它根本不适合 int 为非 32 位的层次结构。

    此外,您可以在给定的编译器上使用 UINT_MAX 来确认 int 的大小。

    【讨论】:

    • int 为 16 位的微控制器有很多。
    • 大小(通过使用sizeof 运算符获得)和最小 位数(以便可以表示UINT_MAX 的值)是两个不同的东西。见stackoverflow.com/q/271076/95735
    猜你喜欢
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多