Criação c ++ literais com prefixos e sufixos

tempo e esforço poupança é parte da razão que você usa literais. Existe uma forma abreviada para criar literais e garantir que você obtenha o tipo constante correta. Muitos dos literais padrão fornecê-lo com um prefixo ou sufixo que você pode usar para acessá-los. Precisamente como o prefixo ou sufixo é interpretada depende de como você usá-lo.

Por exemplo, um sufixo de você pode significar um int não assinado quando utilizado com um int valor, enquanto um prefixo de você pode significar um char32_t const ponteiro quando usado com uma cadeia de caracteres. A tabela mostra uma lista dos prefixos e sufixos que a maioria dos compiladores suportam.

Prefixos e sufixos padrão
Tipo de dadosPrefixoSufixoTipo resultante
intU ou uint não assinado
intG ou Glongo
intUL, Ul, UL, ul, LU, Lu, Lu, ou luunsigned long
intLL ou lllongo longo
intULL, Ull, Ull, ull, OLL, OLL, OLL, ou OLLunsigned long long
DuploF ou fflutuador
DuploG ou Glong double
Caractereseuwchar_t
Caracteresvocêchar32_t
Caracteresvocêchar16_t
Cordaeuconst wchar_t *
Cordavocêconst char32_t *
Cordavocêconst char16_t *

Usando os prefixos e sufixos pode economizar tempo considerável. o Prefixos e sufixos exemplo aqui demonstra como você utilizá-los para criar variáveis ​​de vários tipos.

#incluir #include utilizando espaço de nomes std utilizando espaço de nomes ABI-char * demangle (const char * Object) {int Status-char * RealName-RealName = __cxa_demangle (Object, 0, 0, &Status) -Retornar RealName-} int main () {auto Int1 = 23 auto-Int2 = 23L-automático INT3 = 23U-automático int4 = 23U-automático Cadeia1 = "Olá"-auto Cadeia2 = G"Olá"-auto String3 = L"Olá"-auto String4 = u"Olá"-cout lt; lt; int1 lt; lt; endl lt; lt; Demangle (typeid (Int1) .nome ()) lt; lt; endl-cout lt; lt; int2 lt; lt; endl lt; lt; Demangle (typeid (Int2) .nome ()) lt; lt; endl-cout lt; lt; int3 lt; lt; endl lt; lt; Demangle (typeid (INT3) .nome ()) lt; lt; endl-cout lt; lt; int4 lt; lt; endl lt; lt; Demangle (typeid (int4) .nome ()) lt; lt; endl-cout lt; lt; string1 lt; lt; endl lt; lt; Demangle (typeid (Cadeia1) .nome ()) lt; lt; endl-cout lt; lt; string2 lt; lt; endl lt; lt; Demangle (typeid (Cadeia2) .nome ()) lt; lt; endl-cout lt; lt; string3 lt; lt; endl lt; lt; Demangle (typeid (String3) .nome ()) lt; lt; endl-cout lt; lt; String4 lt; lt; endl lt; lt; Demangle (typeid (String4) .nome ()) lt; lt; endl-retorno 0-}

o Demangle () função é específico GCC. A maioria dos compiladores C ++ calandra (Modificar a ortografia) palavras-chave e digite informações para fazer uma aplicação mais difícil para alguém inverter-montar (Converter de linguagem de máquina de volta ao código fonte C ++).

A fim de determinar informações de tipo, você usa o typeid () função para criar um typeinfo estrutura. o nome() devolve o nome do tipo encontrado nesta estrutura para o apresentar no ecrã. No entanto, este nome é desconfigurado, então você deve usar o Demangle () função para mudá-lo de volta à sua forma legível originais.

A maioria dos exemplos neste capítulo contam com a auto palavra-chave para detectar automaticamente o tipo de variável criado por um UDL. Esta palavra-chave é uma característica importante para as aplicações mais recentes C ++ que fazem uso das novas extensões que a língua oferece.

Neste caso, o código usa a palavra-chave auto para detectar a saída do prefixo literal ou sufixo para que a variável é automaticamente o tipo correto para a situação. Quando você executar este aplicativo, você vê o seguinte resultado:

23int23long23unsigned int23unsigned intHellochar const * 0x46e02cwchar_t const * 0x46e038char32_t const * 0x46e02cchar16_t const *

Mesmo que os dados é o mesmo em todos os casos, as variáveis ​​usadas para armazenar os dados diferem por causa do prefixo ou sufixo usado para criar a variável. Note-se que o mesmo prefixo ou sufixo tem efeitos diferentes, dependendo do tipo da variável a qual ela é aplicada. Além disso, às vezes o caso dos prefixo ou sufixo assuntos (como em trabalhar com uma corda).



Alguns compiladores, como o GCC, incluem extensões não-padrão para dados numéricos que você precisa para usar com cuidado. Dada a popularidade do GCC ea necessidade de estes formatos de número, você pode achar que você absolutamente não precisa usá-los às vezes. Aqui estão algumas extensões sufixo comuns fornecidos por implementações GCC:

  • d: Duplo

  • df: _Decimal32

  • dd: _Decimal64

  • dl: _Decimal 128

  • W: __float80

  • q: __float128

  • Eu: complexo duplo

  • fi: complexo flutuador


Publicações relacionadas