La documentación de Qt dice:
typedef qint8
Typedef para char firmado. Se garantiza que este tipo será de 8 bits en todas las plataformas compatibles con Qt.
typedef qint16
Typedef para corto firmado. Se garantiza que este tipo será de 16 bits en todas las plataformas compatibles con Qt.
typedef qint32
Typedef para int firmado. Se garantiza que este tipo será de 32 bits en todas las plataformas compatibles con Qt.
typedef qint64
Typedef para long long int (__int64 en Windows). Se garantiza que este tipo será de 64 bits en todas las plataformas compatibles con Qt.
Los tipos se definen en qglobal.h
siguiente manera:
/* 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 */ //....
Pero me pregunto cómo (por ejemplo) qint32
siempre puede tener una longitud de 32 bits cuando no hay garantía de que int
tenga una longitud de 32 bits. Por lo que sé, en architectures de 64 bits los [EDIT: estaba equivocado. Ver comentarios a continuación.] int
son (o al menos pueden tener) 64 bits de longitud.
¿Cómo pueden garantizar los tamaños? ¿Por qué no usan stdint
(y __intN en plataformas de Windows)?
¿Cómo pueden garantizar los tamaños?
Se dirigen a plataformas específicas que saben que las definiciones anteriores funcionan. Qt no se preocupa por otras plataformas y otras plataformas no se preocupan por Qt. Por lo tanto, no siempre funcionará. Pero donde no funcionará tampoco Qt.
¿Por qué no usan stdint (y __intN en plataformas de Windows)?
A veces es más sencillo mantener los typedefs en
para su propio proyecto en lugar de incluir condicionalmente el encabezado estándar en las plataformas que lo tienen y aún así mantener un respaldo para las plataformas que no lo hacen (por ejemplo, VS2005).
Qt admite muchas plataformas, pero lo que importa es el modelo de datos de 64 bits de la plataforma (o probablemente más correctamente, el modelo de datos del comstackdor más la plataforma).
Las plataformas de 64 bits más comunes utilizan enteros de 32 bits porque implementan alguna forma del modelo de datos LP64. Los modelos de datos basados en ILP64 (ILP64, SILP64, etc.) definen los ints como de 64 bits. Pero no creo que Qt sea compatible con ninguna de estas plataformas .
Visite la página wiki de ILP64 y esta página de soporte para PVS-Studio que tiene buena información técnica.