2010-06-21 10 views
5

Je me souviens avoir lu quelque part que Qt garantit la taille de certains types de données sur les plates-formes supportées. Est-ce que int sera au moins 32 bits partout, et qint32 sera exactement 32 bits partout? Ou autre chose?Est-ce que int est garanti à 32 bits sur chaque plate-forme supportée par Qt, ou seulement qint32?

C++ garantit que int sera d'au moins 16 bits, et quelques structures Qt comme QRect et QPointint usage interne. Je développe une application où 32 bits sont nécessaires avec ces types, et je ne veux pas avoir à dupliquer leurs fonctionnalités pour pouvoir utiliser un type plus grand.

Répondre

6

La taille d'un type entier dépend du compilateur. Je ne pense pas qu'il y ait une garantie que le int sera d'une taille précise. Mais vous pouvez vous assurer que vous savez que ce n'est pas ce que vous voulez en ajoutant cette ligne au début de votre main():

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

Ok, mais 'QtGlobal' définit plusieurs typedefs. Par exemple, la documentation de qint32 indique "Typedef for signed int. Ce type est garanti à 32 bits sur toutes les plates-formes supportées par Qt.". Donc, cela signifie que 'int' doit aussi être garanti à 32 bits sur toutes les plateformes supportées? –

+0

Je ne tirerais pas cette conclusion. Le doc garantit que qint32 sera de taille 32 bits sur toutes les plateformes supportées, et non l'inverse. S'ils doivent à l'avenir prendre en charge une plate-forme qui int n'est pas 32 bits, ils modifieront le typedef de cette plate-forme pour refléter cela. Comme il est implémenté maintenant, vous pouvez supposer que toutes les plates-formes supportées par Qt ont un int 32 bits. Mais la supposition est une chose TRES MAL. –

+1

Le but de qint32 et de ses amis est de fournir un type avec une signature et une taille garanties. Si les types standard fournissent cela, on n'aura pas besoin de ces typedefs Qt;) Je suppose que la documentation de Qt est libellée de manière ambiguë ici. –

0

Alors que, pour autant que je sache, il est techniquement possible que int est pas 32bits, je Je n'ai jamais vu une plateforme là où elle ne l'est pas. Imagine- char, 8bits, court, 16bits, int, .. 24bits? Cela ne correspond tout simplement pas à la hiérarchie pour que int soit non-32bits.

En outre, vous pouvez utiliser UINT_MAX pour confirmer la taille d'int sur votre compilateur donné.

+0

Il y a des tonnes de microcontrôleurs où int est 16 bits. – Falmarri

+0

La taille (obtenue en utilisant l'opérateur 'sizeof') et le nombre de bits ** minimal ** (de sorte que la valeur de' UINT_MAX' puisse être représentée) sont deux choses différentes. Voir http://stackoverflow.com/q/271076/95735 –