Criando C ++ literais com prefixos e sufixos

tempo e esforço poupança é parte da razão pela qual você usar 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 você pode significar um int não assinado quando utilizado com um int valor, enquanto o prefixo você pode significar uma 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
int U ou uint não assinado
int L ou Llongo
int UL, Ul, UL, ul, LU, Lu, Lu, ou luunsigned long
int LL ou lllongo longo
int ULL, Ull, Ull, ull, OLL, OLL, OLL, ou OLLunsigned long long
duplo F ou Fflutuador
duplo L ou Llong double
carbonizareu wchar_t
carbonizarvocê char32_t
carbonizarvocê char16_t
Cordaeu const 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ê pode utilizá-los para criar variáveis ​​de vários tipos.

#incluir #include using namespace std-usando namespace abi-char * demangle (char const * Object) {int Status-char * RealName-RealName = __cxa_demangle (Object, 0, 0, Status) -Retornar RealName-} int main () {auto Int1 = 23-auto Int2 = 23L-auto int3 = 23U-auto int4 = 23U-auto String1 = "Olá" -auto String2 = L "Olá" -auto String3 = U "Olá" -auto String4 = u "Olá" -cout lt; lt; Int1 lt; lt; endl lt; lt; Demangle (typeid (Int1) .name ()) lt; lt; endl-cout lt; lt; int2 lt; lt; endl lt; lt; Demangle (typeid (Int2) .name ()) lt; lt; endl-cout lt; lt; int3 lt; lt; endl lt; lt; Demangle (typeid (int3) .name ()) lt; lt; endl-cout lt; lt; int4 lt; lt; endl lt; lt; Demangle (typeid (int4) .name ()) lt; lt; endl-cout lt; lt; string1 lt; lt; endl lt; lt; Demangle (typeid (String1) .name ()) lt; lt; endl-cout lt; lt; string2 lt; lt; endl lt; lt; Demangle (typeid (String2) .name ()) lt; lt; endl-cout lt; lt; string3 lt; lt; endl lt; lt; Demangle (typeid (String3) .name ()) lt; lt; endl-cout lt; lt; String4 lt; lt; endl lt; lt; Demangle (typeid (String4) .name ()) lt; lt; endl-retorno 0-}

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

Para determinar informações de tipo, você usa o typeid () função para criar um typeinfo estrutura. o nome() função retorna o nome do tipo encontrado nesta estrutura para exibi-lo na tela. No entanto, este nome é mutilado, 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 invocar o 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 ou sufixo literal de modo a que a variável é automaticamente o tipo correcto para uma determinada 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 é a mesma em todos os casos, as variáveis ​​utilizadas para armazenar os dados diferentes, devido ao prefixo ou sufixo utilizado para criar a variável. Note-se que o mesmo prefixo ou sufixo tem efeitos diferentes, dependendo do tipo da variável à qual ele é aplicado. Além disso, por vezes, o caso do 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

menu