Pergunta muito básica: como eu escrevo um short
literal em C ++?
Eu sei o seguinte:
2
é umint
2U
é umunsigned int
2L
é umlong
2LL
é umlong long
2.0f
é umfloat
2.0
é umdouble
'\2'
é umchar
.
Mas como eu escreveria um short
literal? Eu tentei, 2S
mas isso dá um aviso do compilador.
Respostas:
Sim, não é estritamente um literal curto, é mais um cast-int, mas o comportamento é o mesmo e acho que não há uma maneira direta de fazê-lo.
A seguir, ilustra o quanto você deve se preocupar com isso:
Compilar -> desmontar ->
fonte
short foo = 1; foo += (short)2;
. Mas isso não pode ser contornado devido à promoção inteira.O C ++ 11 oferece muito perto do que você deseja. (Pesquise "literais definidos pelo usuário" para saber mais.)
fonte
short
fisicamente não pode serstd::uint
nada, pois é um tipo assinado. E não é necessário que seja 16 bits ou o mesmo tipo de umstd::int16_t
... que nem sequer é necessário que exista em uma determinada implementação se a plataforma não puder fornecer o tipo de largura exata. A idéia central dessa resposta é boa, mas é desvalorizada pela tangente inexplicável em tipos não relacionados que o OP não perguntou.short
conforme solicitado pelo OP.Até os escritores do padrão C99 foram surpreendidos por isso. Este é um trecho da
stdint.h
implementação de domínio público de Danny Smith :fonte
Se você usa o Microsoft Visual C ++, existem sufixos literais disponíveis para cada tipo inteiro:
Observe que essas extensões não são padrão e não são portáteis . Na verdade, eu não conseguia nem localizar nenhuma informação sobre esses sufixos no MSDN.
fonte
""ui8
é definido como'\000'
, o que é essencialmente'\0'
.Você também pode usar a sintaxe do pseudo-construtor.
Acho mais legível do que o elenco.
fonte
Até onde eu sei, você não sabe, não existe esse sufixo. A maioria dos compiladores avisa se um literal inteiro é muito grande para caber em qualquer variável em que você esteja tentando armazená-lo.
fonte