Un literal se usa para representar un valor fijo en un programa. Un literal podría ser cualquier cosa en un código como a, b, c2. , ‘ACB’, etc
De manera similar, los literales definidos por el usuario ( UDL ) proporcionan literales para una variedad de tipos integrados que se limitan a
Ejemplos de literal para tipos incorporados:
// Examples of classical literals for built-in types. 42 // int 2.4 // double 3.2F // float 'w' // char 32ULL // Unsigned long long 0xD0 // Hexadecimal unsigned "cd" // C-style string(const char[3]")
¿Por qué usamos UDL?
Consideremos el siguiente ejemplo para comprender la necesidad de UDL.
long double Weight = 2.3; // pounds? kilograms? grams? // With UDL, we attach units to the values which has // following advantages // 1) The code becomes readable. // 2) Conversion computations are done at compile time. weight = 2.3kg; ratio = 2.3kg/1.2lb;
Para calcular la relación anterior es necesario convertirlos a las mismas unidades. Los UDL nos ayudan a superar los costos unitarios de traducción. Podemos definir literales definidos por el usuario para tipos definidos por el usuario y la nueva forma de literales para tipos incorporados. Ayudan a que las constantes en el código sean más legibles. El valor de los UDL se sustituye por el valor real definido en el código por el compilador en el momento de la compilación. Los UDL no ahorran mucho tiempo de codificación, pero se pueden cambiar más cálculos al tiempo de compilación para una ejecución más rápida.
Ejemplos de literales definidos por el usuario:
"hello"s // string 4.3i // imaginary 101000111101001b // binary 53h // hours 234093270497230409328432840923849 // extended-precision
Los UDL se tratan como una llamada a un operador literal. Solo se admite la forma de sufijo. El nombre del operador literal es operador ” “ seguido del sufijo.
Ejemplo 1:
CPP
// C++ code to demonstrate working of // user defined literals (UDLs) #include <iomanip> #include <iostream> using namespace std; // user defined literals // KiloGram long double operator"" _kg(long double x) { return x * 1000; } // Gram long double operator"" _g(long double x) { return x; } // MiliGram long double operator"" _mg(long double x) { return x / 1000; } // Driver code int main() { long double weight = 3.6_kg; cout << weight << endl; cout << setprecision(8) << (weight + 2.3_mg) << endl; cout << (32.3_kg / 2.0_g) << endl; cout << (32.3_mg * 2.0_g) << endl; return 0; }
3600 3600.0023 16150 0.0646
Ejemplo 2:
CPP
// C++ program to demonstrate UDL with constexpr #include <complex> #include <iostream> using namespace std; // imaginary literal constexpr complex<double> operator"" _i(long double d) { return complex<double>{ 0.0, static_cast<double>(d) }; } int main() { complex<double> z = 3.0 + 4.0_i; complex<double> y = 2.3 + 5.0_i; cout << "z + y = " << z + y << endl; cout << "z * y = " << z * y << endl; cout << "abs(z) = " << abs(z) << endl; return 0; }
z + y = (5.3,9) z * y = (-13.1,24.2) abs(z) = 5
¿Qué es un literal imaginario?
El complejo literal <doble> es la parte real que trata con la parte imaginaria tu_argumento
Sintaxis:
constexpr complex< double > operator"" _i( long double your_argument );
your_argument – el valor del número imaginario. Aquí, constexpr se usa para habilitar la evaluación en tiempo de compilación.
Restricción: UDL solo puede funcionar con los siguientes parámetros:
char const* unsigned long long long double char const*, std::size_t wchar_t const*, std::size_t char16_t const*, std::size_t char32_t const*, std::size_t
Pero el valor de retorno puede ser de cualquier tipo.
Este artículo es una contribución de Mahima Varshney . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA