2010-06-21 2 views
5

Ich erinnere mich irgendwo lesen, dass Qt die Größe einiger Datentypen auf unterstützten Plattformen garantiert. Ist es das int wird mindestens 32 Bits überall sein, und qint32 wird genau sein 32 Bits überall? Oder etwas anderes?Ist int garantiert 32 Bit auf jeder Plattform von Qt oder nur qint32 unterstützt?

C++ garantiert, dass int 16 Bits zumindest sein, und einige Qt Strukturen wie QRect und QPoint Verwendung int intern. Ich entwickle eine Anwendung, bei der 32 Bit mit diesen Typen benötigt werden, und ich möchte ihre Funktionalität nicht duplizieren müssen, damit ich einen größeren Typ verwenden kann.

Antwort

6

Die Größe eines Integer-Typs hängt vom Compiler ab. Ich glaube nicht, dass es eine Garantie gibt, dass die Ebene int eine genaue Größe hat. Aber Sie können sicherstellen, dass Sie wissen, dass es nicht das, was Sie wollen, indem Sie diese Zeile hinzufügen zu Beginn Ihrer main():

if(sizeof(int) != 4) { 
    throw std::runtime_error("int is not 32-bit"); 
} 
+0

Ok, aber 'QtGlobal' definiert mehrere Typedefs. In der Dokumentation für qint32 steht beispielsweise "Typedef für signed int. Dieser Typ ist garantiert 32-Bit auf allen von Qt unterstützten Plattformen." Das bedeutet also, dass "int" auch auf allen unterstützten Plattformen 32 Bit garantiert sein muss? –

+0

Ich würde diese Schlussfolgerung nicht ableiten. Das doc garantiert, dass qint32 auf allen unterstützten Plattformen eine 32-Bit-Größe hat und nicht umgekehrt. Wenn sie in der Zukunft eine Plattform unterstützen müssen, die int nicht 32-bit ist, werden sie das typedef für diese Plattform ändern, um das widerzuspiegeln. Da es jetzt implementiert ist, können Sie davon ausgehen, dass alle von Qt unterstützten Plattformen über 32-Bit-Int verfügen. Aber Annahme ist eine SEHR BÖSE Sache. –

+1

Der Zweck von qint32 und Freunden besteht darin, einen Typ mit garantierter Signedness und Größe anzugeben. Wenn die Standardtypen das bereitstellen würden, würde man diese Qt typedefs nicht brauchen;) Ich schätze, die Qt-Dokumentation ist hier zweideutig formuliert. –

0

Während, wie weit ich weiß, ist es technisch möglich ist, dass int nicht 32bits ist, ich Ich habe noch nie eine Plattform gesehen, wo es nicht ist. Imagine- char, 8Bits, kurz, 16Bits, int, .. 24Bits? Es passt einfach nicht in die Hierarchie für Int, um Nicht-32-Bit zu sein.

Zusätzlich können Sie UINT_MAX verwenden, um die Größe von int auf Ihrem gegebenen Compiler zu bestätigen.

+0

Es gibt Tonnen von Mikrocontrollern, in denen Int 16 Bit ist. – Falmarri

+0

Größe (durch Verwendung von "Sizeof" -Operator) und ** minimale ** Anzahl von Bits (so dass der Wert von "UINT_MAX" dargestellt werden könnte) sind zwei verschiedene Dinge. Siehe http://stackoverflow.com/q/271076/95735 –