Dokładne liczby całkowite w C ++ / Qt: Czy typedef int qint32 jest naprawdę poprawny?
Dokumentacja Qt mówi:
typedef qint8
Typedef dla podpisanego znaku. Ten typ jest gwarantowany jako 8-bitowy na wszystkich platformach obsługiwanych przez Qt.
typedef qint16
Typedef na podpisane krótkie. Ten typ jest gwarantowany jako 16-bitowy na wszystkich platformach obsługiwanych przez Qt.
typedef qint32
Typedef dla podpisanego int. Ten typ jest gwarantowany jako 32-bitowy na wszystkich platformach obsługiwanych przez Qt.
typedef qint64
Typedef dla long long int (__int64 w systemie Windows). Ten typ jest gwarantowany jako 64-bitowy na wszystkich platformach obsługiwanych przez Qt.
Typy są zdefiniowane wqglobal.h
następująco:
/*
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 */
//....
Ale zastanawiam się, jak (na przykład)qint32
zawsze może mieć długość 32 bitów, jeśli nie ma takiej gwarancjiint
ma 32 bity długości.O ile wiem, na architekturach 64-bitowychint
s są (lub przynajmniej mogą być) 64-bitowe. [EDIT: Myliłem się. Zobacz komentarze poniżej.]
Jak mogą zagwarantować rozmiary? Dlaczego nie używająstdint
(i __intN na platformach Windows)?