Question très basique: comment écrire un short
littéral en C ++?
Je sais ce qui suit:
2
est unint
2U
est ununsigned int
2L
est unlong
2LL
est unlong long
2.0f
est unfloat
2.0
est undouble
'\2'
est unchar
.
Mais comment écrire un short
littéral? J'ai essayé 2S
mais cela donne un avertissement au compilateur.
Réponses:
Ouais, ce n'est pas strictement un court littéral, plutôt un casted-int, mais le comportement est le même et je pense qu'il n'y a pas de moyen direct de le faire.
Ce qui suit illustre à quel point vous devriez vous inquiéter à ce sujet:
Compiler -> démonter ->
la source
short foo = 1; foo += (short)2;
. Mais cela ne peut pas être contourné en raison de la promotion entière.C ++ 11 vous donne assez proche de ce que vous voulez. (Recherchez "littéraux définis par l'utilisateur" pour en savoir plus.)
la source
short
physiquement ne peut pas êtrestd::uint
quelque chose, car il s'agit d'un type signé. Et il n'est pas nécessaire qu'il s'agisse de 16 bits ou du même type qu'unstd::int16_t
... qui lui-même n'est même pas obligé d' exister dans une implémentation donnée si la plate-forme ne peut pas fournir le type de largeur exacte. L'idée de base de cette réponse est bonne, mais elle est dévaluée par la tangente inexplicable en types non liés que l'OP n'a pas posé de questions.short
comme l'a demandé OP.Même les auteurs de la norme C99 ont été surpris par cela. Voici un extrait de l'
stdint.h
implémentation du domaine public de Danny Smith :la source
Si vous utilisez Microsoft Visual C ++, des suffixes littéraux sont disponibles pour chaque type d'entier:
Notez que ce sont une extension non standard et ne sont pas portables . En fait, je n'ai même pas pu trouver d'informations sur ces suffixes sur MSDN.
la source
""ui8
est défini comme'\000'
, qui est essentiellement'\0'
.Vous pouvez également utiliser la syntaxe de pseudo-constructeur.
Je le trouve plus lisible que le casting.
la source
Autant que je sache, ce n'est pas le cas, il n'y a pas de suffixe. La plupart des compilateurs avertiront si un littéral entier est trop grand pour tenir dans la variable dans laquelle vous essayez de le stocker.
la source