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.
Tipo de dados | Prefixo | Sufixo | Tipo resultante |
---|---|---|---|
int | U ou u | int não assinado | |
int | G ou G | longo | |
int | UL, Ul, UL, ul, LU, Lu, Lu, ou lu | unsigned long | |
int | LL ou ll | longo longo | |
int | ULL, Ull, Ull, ull, OLL, OLL, OLL, ou OLL | unsigned long long | |
Duplo | F ou f | flutuador | |
Duplo | G ou G | long double | |
Caracteres | eu | wchar_t | |
Caracteres | você | char32_t | |
Caracteres | você | char16_t | |
Corda | eu | const wchar_t * | |
Corda | você | const char32_t * | |
Corda | você | 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