Genaue Ganzzahlen in C ++ / Qt: Ist typedef int qint32 wirklich korrekt?
In der Qt-Dokumentation heißt es:
typedef qint8
Typedef für signiertes Zeichen. Dieser Typ ist auf allen von Qt unterstützten Plattformen garantiert 8-Bit.
typedef qint16
Typedef für signierte Kurzform. Dieser Typ ist auf allen von Qt unterstützten Plattformen garantiert 16-Bit.
typedef qint32
Typedef für signiertes int. Dieser Typ ist auf allen von Qt unterstützten Plattformen garantiert 32-Bit.
typedef qint64
Typedef für long long int (__int64 unter Windows). Dieser Typ ist auf allen von Qt unterstützten Plattformen garantiert 64-Bit.
Die Typen sind in definiertqglobal.h
wie folgt:
/*
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 */
//....
Aber ich frage mich, wie (zum Beispiel)qint32
kann immer 32 Bit lang sein, wenn es keine Garantie dafür gibtint
ist 32 Bits lang.Soweit ich weiß, auf 64-Bit-Architekturenint
s sind 64 Bit lang (oder können es zumindest sein). [EDIT: Ich habe mich geirrt. Siehe Kommentare unten.]
Wie können sie die Größen garantieren? Warum benutzen sie nichtstdint
(und __intN auf Windows-Plattformen)?