Точные значения ширины в C ++ / Qt: действительно ли typedef int qint32 действительно корректен?
Документация Qt гласит:
typedef qint8
Typedef for signed char. This type is guaranteed to be 8-bit on all platforms supported by Qt.
typedef qint16
Typedef for signed short. This type is guaranteed to be 16-bit on all platforms supported by Qt.
typedef qint32
Typedef for signed int. This type is guaranteed to be 32-bit on all platforms supported by Qt.
typedef qint64
Typedef for long long int (__int64 on Windows). This type is guaranteed to be 64-bit on all platforms supported by Qt.
Типы определены в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 бита, если нет гарантии, чтоint
длиной 32 бита.As far as I know, on 64-bit architectures int
s are (or at least can be) 64 bits long. [Редактировать: я был не прав. Смотрите комментарии ниже.]
Как они могут гарантировать размеры? Почему они не используютstdint
(и __intN на платформах Windows)?