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.
Tipo de dados | Prefixo | Sufixo | Tipo resultante |
---|---|---|---|
int | U ou u | int não assinado | |
int | L ou L | 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 | L ou L | long double | |
carbonizar | eu | wchar_t | |
carbonizar | você | char32_t | |
carbonizar | 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ê 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