Bardzo podstawowe pytanie: jak napisać short
literał w C ++?
Wiem co następuje:
2
jestint
2U
jestunsigned int
2L
jestlong
2LL
jestlong long
2.0f
jestfloat
2.0
jestdouble
'\2'
jestchar
.
Ale jak napisałbym short
dosłowne? Próbowałem, 2S
ale to daje ostrzeżenie kompilatora.
Odpowiedzi:
Tak, to nie jest ściśle krótki, dosłowny, raczej casted-int, ale zachowanie jest takie samo i myślę, że nie ma bezpośredniego sposobu, aby to zrobić.
Poniższe ilustruje, jak bardzo powinieneś się tym martwić:
Kompiluj -> deasembluj ->
źródło
short foo = 1; foo += (short)2;
. Ale nie można tego obejść ze względu na promocję liczb całkowitych.C ++ 11 daje ci prawie to, czego chcesz. (Wyszukaj „literały zdefiniowane przez użytkownika”, aby dowiedzieć się więcej).
źródło
short
fizycznie nie może byćstd::uint
niczym, ponieważ jest to typ ze znakiem. I nie jest wymagane, aby mieć 16 bitów lub ten sam typ, costd::int16_t
..., który sam w sobie nie musi nawet istnieć w danej implementacji, jeśli platforma nie może dostarczyć typu o dokładnej szerokości. Podstawowa idea tej odpowiedzi jest dobra, ale jest zdewaluowana przez niewytłumaczalną styczną do niepowiązanych typów, o które OP nie pytał.short
zgodnie z OP.Nawet pisarze standardu C99 zostali przez to złapani. To jest fragment z
stdint.h
implementacji domeny publicznej Danny'ego Smitha :źródło
Jeśli używasz programu Microsoft Visual C ++, dla każdego typu liczby całkowitej dostępne są dosłowne sufiksy:
Pamiętaj, że są to niestandardowe rozszerzenia i nie są przenośne . W rzeczywistości nie mogłem nawet znaleźć żadnych informacji o tych sufiksach w witrynie MSDN.
źródło
""ui8
Jest zdefiniowany jako'\000'
, czyli zasadniczo'\0'
.Możesz także użyć składni pseudo-konstruktora.
Uważam to za bardziej czytelne niż casting.
źródło
O ile wiem, nie masz, nie ma takiego przyrostka. Większość kompilatorów ostrzeże jednak, jeśli literał całkowity jest zbyt duży, aby zmieścić się w dowolnej zmiennej, w której próbujesz go przechowywać.
źródło