Los udl incluidos en la biblioteca de c ++ estándar

Video: Compilar programas en C con gcc en linux y estandares

A pesar de que actualmente puede crear literales definidos por el usuario (UDL) para algunos tipos básicos, hay muchas situaciones en las que los desarrolladores necesitan UDL para las clases también. En algunos casos, estas clases son parte de la biblioteca estándar. En la actualidad hay UDL consistentes y estandarizados unidas a algunas clases. Las siguientes son algunas de las clases más importantes y cómo utilizarlos.

std :: basic_string

los std :: basic_string clase hace que sea posible trabajar con secuencias de carbonizarse-como objetos. La clase actualmente ha definido para las plantillas

  • carbonizarse

  • wchar_t

  • char16_t

    Video: 9. Programación en C++ || Expresiones || Ejercicio Porcentaje de notas de un alumno

  • char32_t

Sin embargo, la clase puede ampliarse fácilmente para otros tipos de caracteres. Además, las plantillas permiten especificar los rasgos del carácter y el método utilizado para almacenar los datos en la memoria. La idea esencial detrás de la basic_string es para que sea posible para dar cabida a una variedad de tipos de caracteres dentro de una clase de caracteres para simplificar la codificación.

En C ++ 14, la biblioteca estándar incluye una función de apoyo literal para basic_string. Todo lo que necesita hacer es añadir el s sufijo a una cadena para crear uno. Sin embargo, es importante tener una idea de cómo funciona todo esto detrás de las escenas. los BasicString ejemplo demuestra tres técnicas para la creación de una basic_string objeto.

#incluir #incluir using namespace std operador de cuerdas" _s (const char * str, len sin firmar) {cadena de retorno {str, len} -} int main () {basic_string StdString = "Se trata de una cadena estándar."-auto AutoString = "Esta es una cadena de auto."_s - // Eliminar comentario cuando su compilador compatible con C ++ = 14.//auto UDLString "Esto es una cadena UDL."explorar lt; lt; StdString lt; lt; endl lt; lt; typeid (StdString) .name () lt; lt; endl-cout lt; lt; AutoString lt; lt; endl lt; lt; typeid (AutoString) .name () lt; lt; endl - // Eliminar comentario cuando su compilador compatible con C ++ 14.//cout lt; lt; UDLString lt; lt; endl lt; lt; typeid (UDLString) .name () lt; lt; endl retorno 0-}

En este ejemplo se lleva a cabo tres niveles esenciales de la conversión para que pueda ver la progresión de uno a otro. En el primer caso, se ve el método sencillo para la creación de un simple basic_string objeto, StdString.

Como se puede ver, funciona igual que cualquier otra plantilla. El segundo caso se basa en una definición de C ++ 11 Tipo de operador para emular el UDL que se incluye como parte de C ++ 14. Todo lo que necesita saber por ahora es que el operador hace que sea posible utilizar un acceso directo al crear BASIC_cuerda objetos.

El tercer caso muestra la versión C ++ 14 de la misma _s definición, pero éste está integrado en la biblioteca estándar por lo que no tiene que hacer nada especial para utilizarlo. En los tres casos, se crea la misma basic_string tipo de objeto, pero la técnica es diferente cada vez. Al ejecutar este ejemplo, se ve el resultado siguiente:

Se trata de un string.SsThis estándar es un auto string.SsThis es un string.Ss UDL

Esta salida muestra la forma mutilada de la nombre() salida de la función. El hecho de que las tres cadenas son el mismo te dice que son del mismo tipo de objeto. Si desea ver los nombres unmangled, se puede utilizar el Demangle () función proporcionada.

std :: compleja

Usted puede o no puede recordar los números complejos de la escuela. UN Número complejo se compone de un número real y un número imaginario que se emparejen. Del mundo real utiliza para los números complejos incluyen:

Video: Funciones más habituales de librería string.h.© UPV

  • Ingenieria Eléctrica

  • Dinámica de fluidos

  • Mecánica cuántica

  • Gráficos de computadora

  • Los sistemas dinámicos

Hay otros usos para los números complejos, también, pero esta lista deben darle algunas ideas. En general, si usted no está involucrado en ninguna de estas disciplinas, es probable que no puedan encontrar los números complejos. Sin embargo, la biblioteca estándar proporciona soporte completo para los números complejos, en caso de que los necesite.

Al igual que con la BasicString ejemplo, este ejemplo muestra la progresión de una declaración estándar para el sufijo C ++ 14. los Número complejo ejemplo demuestra las tres etapas para que pueda ver cómo tanto el C ++ 14 y el sufijo C ++ 11 UDL formas de trabajo.

#incluir #incluir using namespace std-complejo operador" _i (valor doble de largo) {retorno complejo(0, Valor) -} int main () {compleja StdComplex (0, 3,14) -auto Autocomplex = 3.14_i - // Eliminar comentario cuando su compilador compatible con C ++ 14.//auto UDLComplex = 3.14i-cout lt; lt; StdComplex.real () lt; lt; " " lt; lt; StdComplex.imag () lt; lt; endl-cout lt; lt; AutoComplex.real () lt; lt; " " lt; lt; AutoComplex.imag () lt; lt; endl - // Eliminar comentario cuando su compilador compatible con C ++ 14.//cout lt; lt; UDLComplex.real () lt; lt; " " lt; lt; UDLComplex.imag () lt; lt; endl retorno 0-}

El ejemplo declara variables de los tres tipos y asigna valores a ellos. A continuación, muestra tanto las partes real e imaginaria del número. Al ejecutar este ejemplo, se ve el resultado siguiente:

0 3,140 3,140 3,14

Puede crear tres tipos de números complejos. La siguiente lista muestra los sufijos utilizados para cada tipo:

  • yo: doble

  • Si: flotador

  • Illinois: doble largo

std :: :: crono duración

los :: crono duración clase sirve para marcar el paso del tiempo. Responde a la pregunta de cuánto tiempo ha transcurrido entre dos eventos. Los desarrolladores utilizan para todo tipo de propósitos relacionados con el tiempo.

UN :: crono duración objeto se basa en una segunda como la duración estándar entre las garrapatas. UN garrapata es un solo intervalo de tiempo de duración. Usando la configuración estándar, cada tic es igual a un segundo. Sin embargo, se puede utilizar el proporción objeto de definir una nueva duración de la garrapata. Por ejemplo, si se define ratiolt; 60gt; cada garrapata dura un minuto. Del mismo modo, la definición de ratiolt; 1, 5gt; establece cada tic para durar una quinta parte de un segundo.

También es posible cambiar un intervalo a otro utilizando duration_cast ya sea con un intervalo estándar, tales como :: segundos crono, o cualquier intervalo typedef que desea crear. Por ejemplo, typedef crono :: durationgt; fifths- define un intervalo llamado quintos.

Hay mucho más que hablar con el :: crono duración clase, pero ahora tiene suficiente información para trabajar con el Duración ejemplo mostrado. Al igual que con los ejemplos anteriores, éste muestra una progresión desde la definición de una variable directamente, a la utilización de una costumbre UDL, y finalmente el soporte incorporado que C ++ 14 proporciona.

#incluir #incluir using namespace std ::-crono duración operador" _m (largo sin signo Valor de longitud) {return crono :: duración<60>gt; (Valor) -} int main () {// Definir un intervalo de 20 minutes.chrono :: duración<60>gt; StdTime (20) -auto AutoTime (20_m) - // Eliminar comentario cuando su compilador compatible con C ++ 14.//auto UDLTime (20min) - // Salida del tiempo en seconds.cout lt; lt; Chrono :: duration_cast (StdTime) .count () lt; lt; endl-cout lt; lt; Chrono :: duration_cast (AutoTime) .count () lt; lt; endl - // Eliminar comentario cuando su compilador compatible con C ++ 14.//cout lt; lt; Chrono :: duration_cast (UDLTime) .count () // lt; lt; endl retorno 0-}

El ejemplo muestra algunas características de la :: crono duración clase. Sin embargo, se centra de nuevo en la progresión desde la definición de la variable con la mano para el uso de un acceso directo para realizar la tarea. Observe que la UDL se basa en un valor entero en este caso, en lugar de un tipo de punto flotante. El valor de 20 minutos se convierte en segundos para la salida. Como resultado, se ve estos valores cuando se ejecuta la aplicación:

120012001200

La biblioteca estándar soporta un número de sufijos para :: crono duración cuando se utiliza C ++ 14. La siguiente lista muestra los sufijos individuales y le dice lo que significan:

  • marido: horas

  • min: Minutos

  • s: Segundos

  • Sra: milisegundos

  • nos: microsegundos

  • ns: nanosegundos

Artículos Relacionados