在Qt支持的每个平台上,int是否保证为32位,还是只有qint32保证为32位?

6

我记得在某个地方读到Qt保证支持的平台上某些数据类型的大小。是指int在所有地方至少为32位,而qint32在所有地方恰好为32位吗?还是其他什么?

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

2个回答

6
整数类型的大小取决于编译器。我认为没有保证普通的 int 将具有精确的大小。但是,您可以通过将以下行添加到您的 main() 开始位置来确保您知道它不是您想要的大小:
if(sizeof(int) != 4) {
  throw std::runtime_error("int is not 32-bit");
}

好的,但是 QtGlobal 定义了几个 typedefs。例如,qint32 的文档说:“有符号整数的 typedef。这种类型在 Qt 支持的所有平台上保证为 32 位。”。因此,这意味着在所有支持的平台上,int 也必须保证为 32 位吗? - Jake Petroules
我不会得出那个结论。文档保证 qint32 在所有支持的平台上都是 32 位大小,而不是反过来。如果他们将来必须支持一个 int 不是 32 位的平台,他们将更改该平台的 typedef 以反映这一点。现在实现的方式是,您可以假设 Qt 支持的所有平台都具有 32 位 int。但是假设是一件非常危险的事情。 - Stephen Chu
1
qint32和其它相关类型的目的是提供一种具有保证符号和大小的类型。如果标准类型能够提供这个,那么就不需要使用Qt中的typedef了 ;) 我猜Qt文档在这里措辞有歧义。 - Frank Osterfeld
通过使用 sizeof 来检查 int 的大小,你无法知道它有多少位。请参见 https://dev59.com/TXVC5IYBdhLWcg3whBaj。 - Piotr Dobrogost
@Piotr:你打算在Qt支持的每个平台上进行测试吗?祝好运! - Roman L

0

据我所知,虽然从技术上讲int不一定是32位,但我从未见过它不是32位的平台。想象一下- char,8位,short,16位,int,.. 24位?这根本不符合int非32位的层次结构。

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


有很多微控制器的int为16位。 - Falmarri
通过使用 sizeof 运算符获得的大小和最小位数(以便表示 UINT_MAX 的值)是两个不同的概念。请参阅 https://dev59.com/TXVC5IYBdhLWcg3whBaj。 - Piotr Dobrogost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接