Creación de c ++ literales con prefijos y sufijos
El ahorro de tiempo y esfuerzo es parte de la razón de utilizar literales. No es una forma abreviada para crear literales y asegurarse de que usted obtenga el tipo constante correcta. Muchos de los literales estándar le proporcionará un prefijo o sufijo que puede utilizar para acceder a ellos. Precisamente cómo se interpreta el prefijo o sufijo depende de cómo lo usa.
Por ejemplo, un sufijo de U podría significar un unsigned int cuando se utiliza con una int valor, mientras que un prefijo de U podría significar una char32_t const puntero cuando se utiliza con una cadena de caracteres. La tabla muestra una lista de los prefijos y sufijos que apoyan la mayoría de los compiladores.
Tipo de datos | Prefijo | Sufijo | Tipo resultante |
---|---|---|---|
int | U o u | unsigned int | |
int | L o l | largo | |
int | UL, UL, UL, ul, LU, Lu, Lu, o lu | unsigned long | |
int | LL o ll | largo largo | |
int | ULL, Ull, ULL, ull, Universidad de Loma Linda, Loma Linda, Loma Linda, o llu | unsigned long long | |
doble | F o f | flotador | |
doble | L o l | long double | |
Char | L | wchar_t | |
Char | U | char32_t | |
Char | u | char16_t | |
Cuerda | L | const wchar_t * | |
Cuerda | U | char32_t const * | |
Cuerda | u | char16_t const * |
El uso de los prefijos y sufijos puede ahorrar un tiempo considerable. los PrefixesAndSuffixes ejemplo aquí demuestra cómo te emplearlos para crear variables de diversos tipos.
#include#include using namespace std-using namespace abi-char * demangle (const char * Object) {int Estado-char * RealName-RealName = __cxa_demangle (Object, 0, 0, Status) -Retorno RealName-} int main () {auto Int1 = 23-auto Int2 = 23L-auto Int3 = 23U-auto INT4 = 23U-auto cadena1 = "Hola" -auto cadena2 = L "Hello" -auto string3 = U "Hola" -auto STRING4 = u "Hola" -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; Cadena1 lt; lt; endl lt; lt; Demangle (typeid (cadena1) .name ()) lt; lt; endl-cout lt; lt; Cadena2 lt; lt; endl lt; lt; Demangle (typeid (cadena2) .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-}
los Demangle () función es específica del CCG. La mayoría de los compiladores de C ++ exprimidor (modificar la ortografía de) palabras clave y escriba la información para hacer una aplicación más difícil para que alguien revertir a montar (convertir de lenguaje de máquina de nuevo en código fuente C ++).
Con el fin de determinar la información de tipo, se utiliza el typeid () función para crear una typeinfo estructura. los nombre() función devuelve el nombre del tipo que se encuentra en esta estructura para que se muestre en pantalla. Sin embargo, este nombre es destrozado, por lo que debe utilizar el Demangle () función para cambiar de nuevo a su forma original, legible.
La mayoría de los ejemplos de este capítulo se basan en la auto palabra clave para detectar automáticamente el tipo de variable creada por un UDL. Esta palabra clave es una característica importante para las aplicaciones más recientes de C ++ que hacen uso de las nuevas extensiones que el lenguaje proporciona.
En este caso, el código utiliza la palabra clave de auto para detectar la salida del prefijo o sufijo literal de manera que la variable es automáticamente el tipo correcto para una situación. Al ejecutar esta aplicación, verá la siguiente salida:
23int23long23unsigned int23unsigned intHellochar const * const 0x46e02cwchar_t * const 0x46e038char32_t * 0x46e02cchar16_t const *
A pesar de que los datos son los mismos en todos los casos, las variables utilizadas para contener los datos difieren por el prefijo o sufijo utilizado para crear la variable. Nótese que el mismo prefijo o sufijo tiene efectos diferentes en función del tipo de la variable a la que se aplica. Además, a veces el caso de las materias prefijo o sufijo (como en el trabajo con una cadena).
Algunos compiladores, como GCC, incluyen extensiones no estándar para los datos numéricos que debe utilizar con cuidado. Dada la popularidad de GCC y la necesidad de estos formatos de número, es posible que a pesar de todo hay que usarlos a veces. Estas son algunas de las extensiones de sufijos comunes proporcionadas por las implementaciones del CCG:
d: doble
df: _Decimal32
dd: _Decimal64
dl: _Decimal 128
w: __float80
q: __float128
yo: doble complejo
fi: complejo flotante