Sehr grundlegende Frage: Wie schreibe ich ein short
Literal in C ++?
Ich kenne folgendes:
2
ist einint
2U
ist einunsigned int
2L
ist einlong
2LL
ist einlong long
2.0f
ist einfloat
2.0
ist eindouble
'\2'
ist einchar
.
Aber wie würde ich ein short
Literal schreiben ? Ich habe es versucht, 2S
aber das gibt eine Compiler-Warnung.
Antworten:
Ja, es ist nicht nur ein kurzes Wort, sondern eher ein Casted-Int, aber das Verhalten ist das gleiche und ich denke, es gibt keinen direkten Weg, dies zu tun.
Das Folgende zeigt, wie sehr Sie sich darüber Sorgen machen sollten:
Kompilieren -> zerlegen ->
quelle
short foo = 1; foo += (short)2;
. Dies kann jedoch aufgrund der Ganzzahl-Promotion nicht umgangen werden.Mit C ++ 11 kommen Sie dem, was Sie wollen, ziemlich nahe. (Suchen Sie nach "benutzerdefinierten Literalen", um mehr zu erfahren.)
quelle
short
physisch kannstd::uint
nichts sein, da es ein signierter Typ ist. Und es ist nicht als entweder 16 Bit oder die gleiche Art wie ein erforderlichstd::int16_t
... , die sich nicht einmal erforderlich ist, existieren in einer gegebenen Implementierung , wenn die Plattform nicht die genaue Breitentyp liefern kann. Die Kernidee dieser Antwort ist gut, aber sie wird durch die unerklärliche Tangente an nicht verwandte Typen abgewertet, nach denen das OP nicht gefragt hat.short
wie von OP aked upvote.Sogar die Autoren des C99-Standards waren davon betroffen. Dies ist ein Ausschnitt aus der gemeinfreien
stdint.h
Implementierung von Danny Smith :quelle
Wenn Sie Microsoft Visual C ++ verwenden, sind für jeden Ganzzahltyp Literalsuffixe verfügbar:
Beachten Sie, dass dies eine nicht standardmäßige Erweiterung ist und nicht portabel ist . Tatsächlich konnte ich auf MSDN nicht einmal Informationen zu diesen Suffixen finden.
quelle
""ui8
definiert ist als'\000'
, was im Wesentlichen ist'\0'
.Sie können auch die Pseudokonstruktorsyntax verwenden.
Ich finde es lesbarer als Casting.
quelle
Soweit ich weiß, gibt es kein solches Suffix. Die meisten Compiler warnen jedoch, wenn ein ganzzahliges Literal zu groß ist, um in die Variable zu passen, in der Sie es speichern möchten.
quelle