Literales definidos por el usuario en C++

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;
}
Producción:

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;
}
Producción:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *