Los enteros de ancho exacto en C ++ / Qt: ¿Es typedef int qint32 realmente correcto?

La documentación de Qt dice:

typedef qint8

Typedef para la firma firmada. 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 es de 64 bits en todas las plataformas compatibles con Qt.

Los tipos se definen enqglobal.h como sigue:

/*
   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 32 bits de longitud cuando no hay garantía de queint es de 32 bits de largo.Por lo que yo sé, en arquitecturas de 64 bitsintLos s son (o al menos pueden tener) 64 bits de longitud. [EDIT: estaba equivocado. Ver comentarios a continuación.]

¿Cómo pueden garantizar los tamaños? Porque no usanstdint (y __intN en plataformas Windows)?

Respuestas a la pregunta(2)

Su respuesta a la pregunta