2

Qt 文档说:

typedef qint8

有符号字符的 Typedef。这种类型保证在 Qt 支持的所有平台上都是 8 位的。

typedef qint16

Typedef 为有符号的缩写。这种类型保证在 Qt 支持的所有平台上都是 16 位的。

typedef qint32

有符号整数的 Typedef。这种类型保证在 Qt 支持的所有平台上都是 32 位的。

typedef qint64

用于 long long int 的 Typedef(Windows 上的 __int64)。这种类型保证在 Qt 支持的所有平台上都是 64 位的。

类型定义 qglobal.h如下:

/*
   Size-dependent types (architechture-dependent byte order)
   Make sure to update QMetaType when changing these typedefs
*/
typedef signed char qint8;         /* 8 bit signed */
typedef unsigned char quint8;      /* 8 bit unsigned */
typedef short qint16;              /* 16 bit signed */
typedef unsigned short quint16;    /* 16 bit unsigned */
typedef int qint32;                /* 32 bit signed */
typedef unsigned int quint32;      /* 32 bit unsigned */
//....

但是我想知道(例如)qint32在不能保证 32 位长的情况下如何总是int32 位长。据我所知,在 64 位架构上ints 是(或至少可以是)64 位长。[编辑:我错了。请参阅下面的评论。]

他们如何保证尺寸?他们为什么不使用stdint(和 __intN 在 Windows 平台上)?

4

2 回答 2

3

他们如何保证尺寸?

他们针对他们知道上述定义有效的特定平台。Qt 不关心其他平台,其他平台也不关心 Qt。所以,它并不总是有效。但是在它不起作用的地方,Qt 也不会。

他们为什么不使用 stdint(以及 Windows 平台上的 __intN)?

有时,为您自己的项目维护 typedef<stdint.h>比有条件地在拥有它的平台上包含标准头文件仍然为没有它的平台(例如 VS2005)维护一个备用文件更简单。

于 2012-05-21T20:36:47.120 回答
1

Qt 支持许多平台,但重要的是平台的 64 位数据模型(或者更准确地说,编译器加平台的数据模型)。

大多数常见的 64 位平台使用 32 位整数,因为它们实现了某种形式的 LP64 数据模型。基于 ILP64 的数据模型(ILP64、SILP64 等)将整数定义为 64 位。但我不相信 Qt 支持任何这些平台

查看ILP64 wiki 页面PVS-Studio 支持页面,其中包含一些很好的技术信息。

于 2012-05-21T20:42:55.617 回答