Es un libro electrónico de C ++ no oficial y gratuito creado con fines educativos. Se extrae todo el contenido de la documentación de Stack Overflow, que está escrita por muchas personas trabajadoras en Stack Overflow.
Un poco de Historia
C++ es un lenguaje de programación diseñado en 1979 por Bjarne Stroustrup. La intención de su creación fue extender al lenguaje de programación C mecanismos que permiten la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, C++ es un lenguaje híbrido.
Posteriormente se añadieron facilidades de programación genérica, que se sumaron a los paradigmas de programación estructurada y programación orientada a objetos. Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma.
Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes, tales como ROOT.
El nombre "C++" fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C.
Tabla de contenido
Acerca de 1
Capítulo 1: Empezando con C ++ 2
Observaciones 2
Versiones 2
Examples 2
Hola Mundo 2
Análisis 2
Comentarios 4
Comentarios de una sola línea 4
C-Style / Block Comentarios 4
Importancia de los comentarios 5
Marcadores de comentario utilizados para deshabilitar el código 6
Función 6
Declaración de funciones 6
Llamada de función 7
Definición de la función 8
Sobrecarga de funciones 8
Parámetros predeterminados 8
Llamadas de Funciones Especiales - Operadores 9
Visibilidad de prototipos y declaraciones de funciones. 10
El proceso de compilación estándar de C ++. 11
Preprocesador 12
Capítulo 2: Administracion de recursos 14
Introducción 14
Examples 14
Adquisición de recursos es la inicialización 14
Mutexes y seguridad de rosca 15
Capítulo 3: Alcances 17
Examples 17Alcance de bloque simple 17
Variables globales 17
Capítulo 4: Algoritmos de la biblioteca estándar 19
Examples 19
std :: for_each 19
std :: next_permutation 19
std :: acumular 20
std :: encontrar 22
std :: cuenta 23
std :: count_if 24
std :: find_if 26
std :: min_element 27
Usando std :: nth_element para encontrar la mediana (u otros cuantiles) 29
Capítulo 5: Alineación 30
Introducción 30
Observaciones 30
Examples 30
Consultar la alineación de un tipo. 30
Controlando la alineación 31
Capítulo 6: Archivo I / O 32
Introducción 32
Examples 32
Abriendo un archivo 32
Leyendo de un archivo 33
Escribiendo en un archivo 35
Modos de apertura 36
Cerrando un archivo 37
Flushing un arroyo 38
Leyendo un archivo ASCII en un std :: string 38
Leyendo un archivo en un contenedor 39
Leyendo un `struct` desde un archivo de texto formateado. 40
Copiando un archivo 41¿Revisar el final del archivo dentro de una condición de bucle, mala práctica? 42
Escribir archivos con configuraciones locales no estándar 42
Capítulo 7: Archivos de encabezado 45
Observaciones 45
Examples 45
Ejemplo básico 45
Archivos fuente 45
El proceso de compilación 47
Plantillas en archivos de encabezado 47
Capítulo 8: Aritmética de punto flotante 49
Examples 49
Los números de punto flotante son raros 49
Capítulo 9: Arrays 51
Introducción 51
Examples 51
Tamaño de matriz: tipo seguro en tiempo de compilación. 51
Matriz en bruto de tamaño dinámico 52
Expandiendo la matriz de tamaño dinámico usando std :: vector. 53
Una matriz de matriz sin formato de tamaño fijo (es decir, una matriz sin formato 2D). 54
Una matriz de tamaño dinámico utilizando std :: vector para almacenamiento. 55
Inicialización de matriz 57
Capítulo 10: Atributos 59
Sintaxis 59
Examples 59
[[sin retorno]] 59
[[caer a través]] 60
[[obsoleto]] y [[obsoleto ("motivo")]] 61
[[nodiscard]] 62
[[maybe_unused]] 62
Capítulo 11: auto 64
Observaciones 64
Examples 64Muestra auto básica 64
Plantillas de auto y expresión 65
auto, const, y referencias 65
Tipo de retorno final 66
Lambda genérica (C ++ 14) 66
objetos de auto y proxy 67
Capítulo 12: Bucles 68
Introducción 68
Sintaxis 68
Observaciones 68
Examples 68
Basado en rango para 68
En bucle 71
Mientras bucle 73
Declaración de variables en condiciones. 74
Bucle Do-while 75
Declaraciones de control de bucle: romper y continuar 76
Rango-para sobre un sub-rango 77
Capítulo 13: Búsqueda de nombre dependiente del argumento 79
Examples 79
Que funciones se encuentran 79
Capítulo 14: C ++ Streams 81
Observaciones 81
Examples 81
Corrientes de cuerda 81
Leyendo un archivo hasta el final. 82
Leyendo un archivo de texto línea por línea 82
Líneas sin caracteres de espacios en blanco. 82
Líneas con caracteres de espacio en blanco. 82
Leyendo un archivo en un búfer a la vez 83
Copiando arroyos 83
Arrays 84
Imprimiendo colecciones con iostream 84
Impresión básica 84
Tipo implícito de reparto 84
Generación y transformación. 85
Arrays 85
Análisis de archivos 86
Análisis de archivos en contenedores STL 86
Análisis de tablas de texto heterogéneas 86
Transformación 87
Capítulo 15: Campos de bits 88
Introducción 88
Observaciones 88
Examples 89
Declaración y uso 89
Capítulo 16: Categorías de valor 91
Examples 91
Significados de la categoría de valor 91
prvalue 91
xvalor 92
valor 92
glvalue 93
valor 93
Capítulo 17: Clases / Estructuras 95
Sintaxis 95
Observaciones 95
Examples 95
Conceptos básicos de clase 95
Especificadores de acceso 96
Herencia 97
Herencia virtual 99
Herencia múltiple 101
Acceso a los miembros de la clase 102
Fondo 103
Herencia privada: restringiendo la interfaz de clase base 103
Clases finales y estructuras. 104
Amistad 105
Clases / Estructuras Anidadas 106
Tipos de miembros y alias 111
Miembros de la clase estatica 114
Funciones miembro no estáticas 119
Estructura / clase sin nombre 121
Capítulo 18: Clasificación 123
Observaciones 123
Examples 123
Clasificación de contenedores de secuencia con orden específico 123
Clasificación de contenedores de secuencia por sobrecargado menos operador 123
Clasificación de contenedores de secuencia utilizando la función de comparación 124
Ordenando los contenedores de secuencias usando expresiones lambda (C ++ 11) 125
Clasificación y secuenciación de contenedores. 126
clasificación con std :: map (ascendente y descendente) 127
Clasificación de matrices incorporadas 129
Capítulo 19: Comparaciones lado a lado de ejemplos clásicos de C ++ resueltos a través de 130
Examples 130
Buceando a través de un contenedor 130
Capítulo 20: Compilando y construyendo 132
Introducción 132
Observaciones 132
Examples 132
Compilando con GCC 132
Vinculación con bibliotecas: 134
Compilando con Visual C ++ (Línea de Comando) 134
Compilación con Visual Studio (interfaz gráfica) - Hello World 138
Compilando con Clang 145Compiladores en linea 146
El proceso de compilación de C ++. 147
Compilando con Code :: Blocks (interfaz gráfica) 149
Capítulo 21: Comportamiento definido por la implementación 155
Examples 155
Char puede estar sin firmar o firmado 155
Tamaño de los tipos integrales. 155
Tamaño de char 155
Tamaño de los tipos enteros con signo y sin signo 155
Tamaño de char16_t y char32_t 157
Tamaño de bool 157
Tamaño de wchar_t 158
Modelos de datos 158
Número de bits en un byte 159
Valor numérico de un puntero 159
Rangos de tipos numéricos 160
Representación del valor de los tipos de punto flotante 161
Desbordamiento al convertir de entero a entero con signo 162
Tipo subyacente (y, por tanto, tamaño) de una enumeración 162
Capítulo 22: Comportamiento indefinido 163
Introducción 163
Observaciones 163
Examples 164
Leer o escribir a través de un puntero nulo. 164
No hay declaración de retorno para una función con un tipo de retorno no nulo 164
Modificar un literal de cadena 165
Accediendo a un índice fuera de límites 165
División entera por cero 166
Desbordamiento de enteros firmado 166
Usando una variable local sin inicializar 167
Múltiples definiciones no idénticas (la regla de una definición) 168Emparejamiento incorrecto de la asignación de memoria y desasignación 169
Accediendo a un objeto como el tipo equivocado 169
Desbordamiento de punto flotante 170
Llamando (Puro) a los Miembros Virtuales del Constructor o Destructor 170
Eliminar un objeto derivado a través de un puntero a una clase base que no tiene un destru 171
Accediendo a una referencia colgante 171
Extendiendo el espacio de nombres `std` o` posix` 172
Desbordamiento durante la conversión hacia o desde el tipo de punto flotante 173
Conversión estática de base a derivada no válida 173
Función de llamada a través del tipo de puntero de función no coincidente 173
Modificar un objeto const 173
Acceso a miembro inexistente a través de puntero a miembro 174
Conversión derivada a base no válida para punteros a miembros 175
Aritmética de puntero no válido 175
Desplazando por un número de posiciones no válido 176
Volviendo de una función [[noreturn]] 176
Destruyendo un objeto que ya ha sido destruido. 176
Recursión de plantilla infinita 177
Capítulo 23: Comportamiento no especificado 178
Observaciones 178
Examples 178
Orden de inicialización de globales a través de TU 178
Valor de una enumeración fuera de rango 179
Reparto estático a partir de un valor falso * 179
Resultado de algunas conversiones reinterpret_cast 180
Resultado de algunas comparaciones de punteros 180
Espacio ocupado por una referencia. 181
Orden de evaluacion de argumentos de funcion. 181
Estado movido de la mayoría de las clases de biblioteca estándar 183
Capítulo 24: Concurrencia con OpenMP 184
Introducción 184
Observaciones 184
Examples 184
OpenMP: Secciones paralelas 184
OpenMP: Secciones paralelas 185
OpenMP: Parallel For Loop 186
OpenMP: Recopilación paralela / Reducción 186
Capítulo 25: Const Correccion 188
Sintaxis 188
Observaciones 188
Examples 188
Los básicos 188
Diseño correcto de la clase de Const 189
Constar los parámetros de función correcta 191
Constancia de la corrección como documentación 193
Funciones de miembros calificados para CV const : 193
Parámetros de la función const : 195
Capítulo 26: constexpr 198
Introducción 198
Observaciones 198
Examples 198
variables constexpr 198
funciones constexpr 200
Estática si declaración 202
Capítulo 27: Construir sistemas 204
Introducción 204
Observaciones 204
Examples 204
Generando entorno de construcción con CMake 204
Compilando con GNU make 205
Introducción 205
Reglas básicas 205
Construcciones incrementales 207
Documentación 207
Construyendo con scons 208
Ninja 208
Introducción 208
NMAKE (Utilidad de mantenimiento de programas de Microsoft) 209
Introducción 209
Autotools (GNU) 209
Introducción 209
Capítulo 28: Contenedores C ++ 211
Introducción 211
Examples 211
Diagrama de flujo de contenedores C ++ 211
Capítulo 29: Control de flujo 214
Observaciones 214
Examples 214
caso 214
cambiar 214
captura 215
defecto 215
Si 216
más 216
ir 216
regreso 217
lanzar 217
tratar 218
Estructuras condicionales: if, if..else 219
Saltar declaraciones: romper, continuar, goto, salir. 220
Capítulo 30: Conversiones de tipo explícito 224
Introducción 224
Sintaxis 224
Observaciones 224
Examples 225
Base a conversión derivada 225Arrojando constness 226
Tipo de conversión de punning 226
Conversión entre puntero y entero 227
Conversión por constructor explícito o función de conversión explícita 228
Conversión implícita 228
Enum las conversiones 229
Derivado a conversión base para punteros a miembros 230
nulo * a T * 230
Casting estilo c 231
Capítulo 31: Copia elision 232
Examples 232
Propósito de la copia elision 232
Copia garantizada elision 233
Valor de retorno elision 234
Parámetro elision 235
Valor de retorno con nombre elision 235
Copia inicializacion elision 236
Capítulo 32: Copiando vs Asignación 237
Sintaxis 237
Parámetros 237
Observaciones 237
Examples 237
Operador de Asignación 238
Copia Constructor 238
Copiar constructor vs Asignación de constructor 239
Capítulo 33: decltype 241
Introducción 241
Examples 241
Ejemplo básico 241
Otro ejemplo 241
Capítulo 34: deducción de tipo 243
Observaciones 243
Examples 243
Deducción de parámetros de plantilla para constructores. 243
Tipo de plantilla Deducción 243
Deducción de tipo automático 244
Capítulo 35: Devolviendo varios valores de una función 247
Introducción 247
Examples 247
Uso de parámetros de salida 247
Usando std :: tuple 248
Usando std :: array 249
Usando std :: pair 249
Usando struct 250
Encuadernaciones Estructuradas 251
Usando un consumidor de objetos de función 252
Usando std :: vector 253
Usando el iterador de salida 254
Capítulo 36: Diseño de tipos de objetos 255
Observaciones 255
Examples 255
Tipos de clase 255
Tipos aritméticos 258
Tipos de caracteres estrechos 258
Tipos enteros 258
Tipos de punto flotante 258
Arrays 259
Capítulo 37: Ejemplos de servidor cliente 260
Examples 260
Hola servidor TCP 260
Hola cliente TCP 263
Capítulo 38: El estándar ISO C ++ 265
Introducción 265
Observaciones 265
Examples 266
Borradores de trabajo actuales 266
C ++ 11 266
Extensiones de lenguaje 266
Características generales 266
Las clases 267
Otros tipos 267
Plantillas 267
Concurrencia 267
Características de varios idiomas 267
Extensiones de biblioteca 268
General 268
Contenedores y algoritmos 268
Concurrencia 268
C ++ 14 269
Extensiones de lenguaje 269
Extensiones de biblioteca 269
En desuso / Eliminado 269
C ++ 17 269
Extensiones de lenguaje 269
Extensiones de biblioteca 270
C ++ 03 270
Extensiones de lenguaje 270
C ++ 98 270
Extensiones de lenguaje (con respecto a C89 / C90) 270
Extensiones de biblioteca 271
C ++ 20 271
Extensiones de lenguaje 271
Extensiones de biblioteca 271
Capítulo 39: El puntero este 272
Observaciones 272
Examples 272
este puntero 272
Uso de este puntero para acceder a datos de miembros 274
Uso de este puntero para diferenciar entre datos de miembros y parámetros 275
este puntero CV-calificadores 276
este puntero ref-calificadores 279
Capítulo 40: Enhebrado 281
Sintaxis 281
Parámetros 281
Observaciones 281
Examples 281
Operaciones de hilo 281
Pasando una referencia a un hilo 282
Creando un std :: thread 282
Operaciones en el hilo actual 284
Usando std :: async en lugar de std :: thread 286
Asincrónicamente llamando a una función 286
Errores comunes 286
Asegurando un hilo siempre está unido 286
Reasignando objetos de hilo 287
Sincronizacion basica 288
Uso de variables de condición 288
Crear un grupo de subprocesos simple 290
Almacenamiento de hilo local 292
Capítulo 41: Entrada / salida básica en c ++ 294
Observaciones 294
Examples 294
entrada de usuario y salida estándar 294
Capítulo 42: Enumeración 296
Examples 296
Declaración de enumeración básica 296Enumeración en declaraciones de cambio 297
Iteración sobre una enumeración 297
Enumerados con alcance 298
Enumerar la declaración hacia adelante en C ++ 11 299
Capítulo 43: Errores comunes de compilación / enlazador (GCC) 301
Examples 301
error: '***' no fue declarado en este alcance 301
Variables 301
Funciones 301
referencia indefinida a `*** ' 302
error fatal: ***: No existe tal archivo o directorio 303
Capítulo 44: Escriba palabras clave 304
Examples 304
clase 304
estructura 305
enumerar 305
Unión 307
Capítulo 45: Espacios de nombres 308
Introducción 308
Sintaxis 308
Observaciones 308
Examples 309
¿Qué son los espacios de nombres? 309
Haciendo espacios de nombres 310
Extendiendo espacios de nombres 311
Usando directiva 311
Búsqueda dependiente del argumento 312
¿Cuándo no se produce ADL? 313
Espacio de nombres en línea 313
Sin nombre / espacios de nombres anónimos 315
Espacios de nombres anidados compactos 316
Aliasing un espacio de nombres largo 316
Alcance de la Declaración de Alias 317
Alias del espacio de nombres 317
Capítulo 46: Especificaciones de vinculación 319
Introducción 319
Sintaxis 319
Observaciones 319
Examples 319
Controlador de señal para sistema operativo similar a Unix 319
Hacer un encabezado de biblioteca C compatible con C ++ 319
Capítulo 47: Especificadores de clase de almacenamiento 321
Introducción 321
Observaciones 321
Examples 321
mudable 321
registro 322
estático 322
auto 323
externo 324
Capítulo 48: Estructuras de datos en C ++ 326
Examples 326
Implementación de listas enlazadas en C ++ 326
Capítulo 49: Estructuras de sincronización de hilos. 329
Introducción 329
Examples 329
std :: shared_lock 329
std :: call_once, std :: once_flag 329
Bloqueo de objetos para un acceso eficiente. 330
std :: condition_variable_any, std :: cv_status 331
Capítulo 50: Excepciones 332
Examples 332
Atrapando excepciones 332
Excepción de recirculación (propagación) 333Función Try Blocks En constructor 334
Función Try Block para la función regular 334
Función Try Blocks En Destructor 335
Mejores prácticas: tirar por valor, atrapar por referencia constante 335
La excepción jerarquizada 336
std :: uncaught_exceptions 338
Excepción personalizada 340
Capítulo 51: Expresiones Fold 343
Observaciones 343
Examples 343
Pliegues Unarios 343
Pliegues binarios 344
Doblando sobre una coma 344
Capítulo 52: Expresiones regulares 346
Introducción 346
Sintaxis 346
Parámetros 346
Examples 347
Ejemplos básicos de regex_match y regex_search 347
Ejemplo de regex_replace 347
regex_token_iterator Ejemplo 348
Ejemplo de regex_iterator 348
Dividiendo una cuerda 349
Cuantificadores 349
Anclas 351
Capítulo 53: Fecha y hora usando encabezamiento 352
Examples 352
Tiempo de medición utilizando 352
Encuentra el número de días entre dos fechas 352
Capítulo 54: Función de C ++ "llamada por valor" vs. "llamada por referencia" 354
Introducción 354
Examples 354Llamar por valor 354
Capítulo 55: Función de sobrecarga de plantillas 356
Observaciones 356
Examples 356
¿Qué es una sobrecarga de plantilla de función válida? 356
Capítulo 56: Funciones de miembro de clase constante 358
Observaciones 358
Examples 358
función miembro constante 358
Capítulo 57: Funciones de miembro virtual 360
Sintaxis 360
Observaciones 360
Examples 360
Usando override con virtual en C ++ 11 y versiones posteriores 360
Funciones de miembro virtual vs no virtual 361
Funciones virtuales finales 362
Comportamiento de funciones virtuales en constructores y destructores. 363
Funciones virtuales puras 364
Capítulo 58: Funciones en linea 367
Introducción 367
Sintaxis 367
Observaciones 367
Inline como directiva de vinculación 367
Preguntas frecuentes 367
Ver también 368
Examples 368
Declaración de función en línea no miembro 368
Definición de función en línea no miembro 368
Funciones en línea miembro 368
¿Qué es la función en línea? 369
Capítulo 59: Funciones especiales para miembros 370
Examples 370
Destructores virtuales y protegidos. 370
Movimiento implícito y copia 371
Copiar e intercambiar 371
Constructor predeterminado 373
Incinerador de basuras 375
Capítulo 60: Funciones miembro no estáticas 378
Sintaxis 378
Observaciones 378
Examples 378
Funciones miembro no estáticas 378
Encapsulacion 379
Nombre ocultar e importar 380
Funciones de miembro virtual 382
Const Correccion 384
Capítulo 61: Futuros y Promesas 387
Introducción 387
Examples 387
std :: futuro y std :: promesa 387
Ejemplo de asíncrono diferido 387
std :: packaged_task y std :: futuro 388
std :: future_error y std :: future_errc 388
std :: futuro y std :: async 389
Clases de operaciones asincrónicas 391
Capítulo 62: Generación de números aleatorios 392
Observaciones 392
Examples 392
Generador de valor aleatorio verdadero 392
Generando un número pseudoaleatorio 393
Uso del generador para múltiples distribuciones. 393
Capítulo 63: Gestión de la memoria 395
Sintaxis 395
Observaciones 395
Examples 395
Apilar 395
Almacenamiento gratuito (Heap, asignación dinámica ...) 396
Colocación nueva 397
Capítulo 64: Herramientas y Técnicas de Depuración y Prevención de Depuración de C ++ 400
Introducción 400
Observaciones 400
Examples 400
Mi programa de C ++ termina con segfault - valgrind 400
Análisis de Segfault con GDB 402
Código limpio 403
El uso de funciones separadas para acciones separadas. 404
Usando formateo / construcciones consistentes 405
Señala la atención a las partes importantes de tu código. 405
Conclusión 405
Análisis estático 405
Advertencias del compilador 406
Herramientas externas 406
Otras herramientas 407
Conclusión 407
Apilamiento seguro (corrupciones de la pila) 407
¿Qué partes de la pila se mueven? 407
¿Para qué se usa realmente? 407
¿Cómo habilitarlo? 408
Conclusión 408
Capítulo 65: Idioma Pimpl 409
Observaciones 409
Examples 409
Lenguaje básico de Pimpl 409
Capítulo 66: Implementación de patrones de diseño en C ++ 411
Introducción 411
Observaciones 411
Examples 411
Patrón observador 411
Patrón de adaptador 414
Patrón de fábrica 416
Patrón de constructor con API fluida 417
Pasar el constructor alrededor 419
Variante de diseño: objeto mutable 420
Capítulo 67: Incompatibilidades C 421
Introducción 421
Examples 421
Palabras clave reservadas 421
Punteros débilmente escritos 421
goto o cambiar 421
Capítulo 68: Inferencia de tipos 422
Introducción 422
Observaciones 422
Examples 422
Tipo de datos: Auto 422
Lambda auto 422
Bucles y auto 423
Capítulo 69: Internacionalización en C ++ 424
Observaciones 424
Examples 424
Entendiendo las características de la cadena C ++ 424
Capítulo 70: Iteración 426
Examples 426
descanso 426
continuar 426
hacer 426
para 426
mientras 427
rango basado en bucle 427
Capítulo 71: Iteradores 428
Examples 428
Iteradores C (Punteros) 428
Rompiendolo 428
Visión general 429
Los iteradores son posiciones 429
De los iteradores a los valores 429
Iteradores inválidos 431
Navegando con iteradores 431
Conceptos de iterador 432
Rasgos del iterador 432
Iteradores inversos 433
Iterador de vectores 434
Iterador de mapas 434
Iteradores de corriente 435
Escribe tu propio iterador respaldado por generador 435
Capítulo 72: La Regla De Tres, Cinco Y Cero 437
Examples 437
Regla de cinco 437
Regla de cero 438
Regla de tres 439
Protección de autoasignación 441
Capítulo 73: Lambdas 443
Sintaxis 443
Parámetros 443
Observaciones 444
Examples 444
¿Qué es una expresión lambda? 444
Especificando el tipo de retorno 447
Captura por valor 448
Captura generalizada 449
Captura por referencia 450
Captura por defecto 451
Lambdas genericas 451
Conversión a puntero de función. 453
Clase lambdas y captura de esta. 453
Portar funciones lambda a C ++ 03 usando functores 455
Lambdas recursivas 456
Usa std::function 456
Utilizando dos punteros inteligentes: 457
Usa un combinador en Y 457
Usando lambdas para desempaquetar paquetes de parámetros en línea 458
Capítulo 74: Literales 461
Introducción 461
Examples 461
cierto 461
falso 461
nullptr 461
esta 462
Literal entero 462
Capítulo 75: Literales definidos por el usuario 465
Examples 465
Literales definidos por el usuario con valores dobles largos. 465
Literales estándar definidos por el usuario para la duración 465
Literales estándar definidos por el usuario para cuerdas. 466
Literales estándar definidos por el usuario para complejos. 466
Literales auto-hechos definidos por el usuario para binarios 467
Capítulo 76: Manipulación de bits 469
Observaciones 469
Examples 469
Poniendo un poco 469
Manipulación de bits estilo C 469
Usando std :: bitset 469
Despejando un poco 469
Manipulación de bits estilo C 469
Usando std :: bitset 470
Toggling un poco 470
Manipulación de bits estilo C 470
Usando std :: bitset 470
Revisando un poco 470
Manipulación de bits estilo C 470
Usando std :: bitset 471
Cambiando el nth bit a x 471
Manipulación de bits estilo C 471
Usando std :: bitset 471
Establecer todos los bits 471
Manipulación de bits estilo C 471
Usando std :: bitset 471
Eliminar el bit de ajuste más a la derecha 471
Manipulación de bits estilo C 471
Set de bits de conteo 472
Compruebe si un entero es una potencia de 2 473
Aplicación de manipulación de bits: letra pequeña a mayúscula 473
Capítulo 77: Manipuladores de corriente 475
Introducción 475
Observaciones 475
Examples 476
Manipuladores de corriente 477
Manipuladores de flujo de salida 483
Manipuladores de flujo de entrada 484
Capítulo 78: Más comportamientos indefinidos en C ++ 486
Introducción 486
Examples 486
Refiriéndose a los miembros no estáticos en las listas de inicializadores 486
Capítulo 79: Mejoramiento 487
Introducción 487
Examples 487
Expansión en línea / en línea 487
Optimización de la base vacía 487
Capítulo 80: Metaprogramación 489
Introducción 489
Observaciones 489
Examples 489
Cálculo de factoriales 489
Iterando sobre un paquete de parámetros 492
Iterando con std :: integer_sequence 493
Despacho de etiquetas 494
Detectar si la expresión es válida 495
Cálculo de la potencia con C ++ 11 (y superior) 496
Distinción manual de los tipos cuando se da cualquier tipo T 497
Si-entonces-de lo contrario 498
Generic Min / Max con cuenta de argumento variable 498
Capítulo 81: Metaprogramacion aritmica 500
Introducción 500
Examples 500
Cálculo de la potencia en O (log n) 500
Capítulo 82: Modelo de memoria C ++ 11 502
Observaciones 502
Operaciones atómicas 502
Consistencia secuencial 503
Pedidos relajados 503
Liberar-Adquirir pedidos 503
Orden de liberación de consumo 504Vallas 504
Examples 504
Necesidad de modelo de memoria 504
Ejemplo de valla 506
Capítulo 83: Mover la semantica 508
Examples 508
Mover la semántica 508
Mover constructor 508
Mover la tarea 510
Usando std :: move para reducir la complejidad de O (n²) a O (n) 511
Uso de semántica de movimiento en contenedores 514
Reutilizar un objeto movido 515
Capítulo 84: Mutex recursivo 516
Examples 516
std :: recursive_mutex 516
Capítulo 85: Mutexes 517
Observaciones 517
Es mejor usar std :: shared_mutex que std :: shared_timed_mutex . 517
El siguiente código es la implementación de MSVC14.1 de std :: shared_mutex. 517
El siguiente código es la implementación de MSVC14.1 de std :: shared_timed_mutex. 519
std :: shared_mutex procesó lectura / escritura más de 2 veces más que std :: shared_timed 522
Examples 525
std :: unique_lock, std :: shared_lock, std :: lock_guard 525
Estrategias para clases de bloqueo: std :: try_to_lock, std :: adopt_lock, std :: defer_lo 526
std :: mutex 527
std :: scoped_lock (C ++ 17) 528
Tipos mutex 528
std :: bloqueo 528
Capítulo 86: Objetos callables 529
Introducción 529
Observaciones 529
Examples 529
Punteros a funciones 529
Clases con operador () (Functors) 530
Capítulo 87: Operadores de Bits 531
Observaciones 531
Examples 531
& - a nivel de bit y 531
| - en modo bit o 532
^ - XOR bitwise (OR exclusivo) 532
~ - bitwise NOT (complemento único) 534
<< - desplazamiento a la izquierda 535
>> - cambio a la derecha 536
Capítulo 88: Optimización en C ++ 537
Examples 537
Optimización de clase base vacía 537
Introducción al rendimiento 537
Optimizando ejecutando menos código. 538
Eliminando código inútil 538
Haciendo código solo una vez 538
Evitar la reasignación inútil y copiar / mover 539
Usando contenedores eficientes 540
Optimización de objetos pequeños 540
Ejemplo 540
¿Cuándo usar? 542
Capítulo 89: Palabra clave amigo 543
Introducción 543
Examples 543
Función de amigo 543
Método de amigo 544
Clase de amigo 544
Capítulo 90: palabra clave const 546
Sintaxis 546
Observaciones 546
Examples 546
Variables locales const 546
Punteros const 547
Funciones de miembro const 547
Evitar la duplicación de código en los métodos const y non-const getter. 547
Capítulo 91: palabra clave mutable 550
Examples 550
modificador de miembro de clase no estático 550
lambdas mutables 550
Capítulo 92: Palabras clave 552
Introducción 552
Sintaxis 552
Observaciones 552
Examples 554
asm 554
explícito 555
noexcept 555
escribe un nombre 557
tamaño de 557
Diferentes palabras clave 558
Capítulo 93: Palabras clave de la declaración variable 563
Examples 563
const 563
decltype 563
firmado 564
no firmado 564
volátil 565
Capítulo 94: Palabras clave de tipo básico 566
Examples 566
En t 566
bool 566
carbonizarse 566char16_t 566
char32_t 567
flotador 567
doble 567
largo 567
corto 568
vacío 568
wchar_t 568
Capítulo 95: Paquetes de parámetros 570
Examples 570
Una plantilla con un paquete de parámetros. 570
Expansión de un paquete de parámetros. 570
Capítulo 96: Patrón de diseño Singleton 571
Observaciones 571
Examples 571
Inicialización perezosa 571
Subclases 572
Hilo seguro Singeton 573
Desinticialización estática segura de singleton. 574
Capítulo 97: Patrón de Plantilla Curiosamente Recurrente (CRTP) 575
Introducción 575
Examples 575
El patrón de plantilla curiosamente recurrente (CRTP) 575
CRTP para evitar la duplicación de código 577
Capítulo 98: Perfilado 579
Examples 579
Perfilando con gcc y gprof 579
Generando diagramas de callgraph con gperf2dot 580
Perfilando el uso de la CPU con gcc y Google Perf Tools 581
Capítulo 99: Plantillas 584
Introducción 584
Sintaxis 584
Observaciones 584
Examples 586
Plantillas de funciones 586
Reenvío de argumentos 587
Plantilla de clase básica 588
Especialización en plantillas 589
Especialización en plantillas parciales. 589
Valor predeterminado del parámetro de la plantilla 591
Plantilla alias 592
Plantilla plantilla parámetros 592
Declaración de argumentos de plantilla no tipo con auto 593
Borrador personalizado vacío para unique_ptr 593
Parámetro de plantilla sin tipo 594
Estructuras de datos de plantillas variables 595
Instanciación explícita 598
Capítulo 100: Plantillas de expresiones 600
Examples 600
Plantillas de expresiones básicas en expresiones algebraicas de elementos 600
Archivo vec.hh: wrapper para std :: vector, utilizado para mostrar el registro cuando se l 602
Archivo expr.hh: implementación de plantillas de expresión para operaciones de elementos ( 603
Archivo main.cc: test src file 607
Un ejemplo básico que ilustra plantillas de expresiones. 609
Capítulo 101: Polimorfismo 614
Examples 614
Definir clases polimórficas. 614
Descenso seguro 615
Polimorfismo y Destructores 617
Capítulo 102: precedencia del operador 618
Observaciones 618
Examples 618
Operadores aritméticos 619
Operadores lógicos AND y OR 619
Lógica && y || operadores: cortocircuito 619
Operadores Unarios 620
Capítulo 103: Preprocesador 622
Introducción 622
Observaciones 622
Examples 622
Incluir guardias 622
Lógica condicional y manejo multiplataforma. 623
Macros 625
Mensajes de error del preprocesador 629
Macros predefinidas 629
Macros x 631
#pragma una vez 633
Operadores de preprocesador 633
Capítulo 104: Pruebas unitarias en C ++ 635
Introducción 635
Examples 635
Prueba de google 635
Ejemplo mínimo 635
Captura 635
Capítulo 105: Punteros 637
Introducción 637
Sintaxis 637
Observaciones 637
Examples 637
Fundamentos de puntero 637
Creando una variable de puntero 637
Tomando la dirección de otra variable 638
Accediendo al contenido de un puntero. 639
Desreferenciación de punteros inválidos 639
Operaciones de puntero 640
Aritmética de puntero 641
Incremento / Decremento 641
Suma resta 641
Diferencia de puntero 641
Capítulo 106: Punteros a los miembros 643
Sintaxis 643
Examples 643
Punteros a funciones miembro estáticas 643
Punteros a funciones miembro 644
Punteros a variables miembro 644
Punteros a variables miembro estáticas 645
Capítulo 107: Punteros inteligentes 647
Sintaxis 647
Observaciones 647
Examples 647
Compartir propiedad (std :: shared_ptr) 647
Compartir con propiedad temporal (std :: weak_ptr) 650
Propiedad única (std :: unique_ptr) 651
Uso de eliminaciones personalizadas para crear una envoltura para una interfaz C 654
Propiedad única sin semántica de movimiento (auto_ptr) 655
Consiguiendo un share_ptr refiriéndose a esto 657
Casting std :: shared_ptr pointers 658
Escribiendo un puntero inteligente: value_ptr 658
Capítulo 108: RAII: la adquisición de recursos es la inicialización 661
Observaciones 661
Examples 661
Cierre 661
Finalmente / ScopeExit 662
ScopeSuccess (c ++ 17) 663
ScopeFail (c ++ 17) 664
Capítulo 109: Recursion en C ++ 667
Examples 667
Uso de la recursión de la cola y la recursión del estilo de Fibonnaci para resolver la sec 667
Recursion con memoizacion. 667
Capítulo 110: Reenvío perfecto 669
Observaciones 669
Examples 669
Funciones de fábrica 669
Capítulo 111: Referencias 671
Examples 671
Definiendo una referencia 671
Las referencias de C ++ son alias de variables existentes 671
Capítulo 112: Regla de una definición (ODR) 673
Examples 673
Función multiplicada definida 673
Funciones en linea 673
Violación ODR a través de la resolución de sobrecarga 675
Capítulo 113: Resolución de sobrecarga 676
Observaciones 676
Examples 676
Coincidencia exacta 676
Categorización de argumento a costo de parámetro 677
Búsqueda de nombres y verificación de acceso 678
Sobrecarga en la referencia de reenvío 678
Pasos de resolución de sobrecarga 679
Promociones y conversiones aritméticas. 681
Sobrecarga dentro de una jerarquía de clases 682
Sobrecarga en constness y volatilidad. 683
Capítulo 114: RTTI: Información de tipo de tiempo de ejecución 685
Examples 685
Nombre de un tipo 685
dynamic_cast 685
La palabra clave typeid 685
Cuándo usar el que está en c ++ 686
Capítulo 115: Semáforo 687
Introducción 687
Examples 687
Semáforo C ++ 11 687
Clase de semáforo en acción. 687
Capítulo 116: Separadores de dígitos 689
Examples 689
Separador de dígitos 689
Capítulo 117: SFINAE (el fallo de sustitución no es un error) 690
Examples 690
enable_if 690
Cuando usarlo 690
void_t 692
arrastrando decltype en plantillas de funciones 693
Que es el SFINAE 694
enable_if_all / enable_if_any 695
is_detected 697
Resolución de sobrecarga con un gran número de opciones. 698
Capítulo 118: Sobrecarga de funciones 700
Introducción 700
Observaciones 700
Examples 700
¿Qué es la sobrecarga de funciones? 700
Tipo de retorno en la sobrecarga de funciones 702
Función de miembro cv-qualifier Sobrecarga 702
Capítulo 119: Sobrecarga del operador 705
Introducción 705
Observaciones 705
Examples 705
Operadores aritméticos 705
Operadores unarios 707
Operadores de comparación 708
Operadores de conversión 709
Operador de subíndice de matriz 710
Operador de llamada de función 711
Operador de asignación 712
Operador NO bit a bit 712
Operadores de cambio de bit para E / S 713
Números complejos revisados 714
Operadores nombrados 718
Capítulo 120: static_assert 721
Sintaxis 721
Parámetros 721
Observaciones 721
Examples 721
static_assert 721
Capítulo 121: std :: array 723
Parámetros 723
Observaciones 723
Examples 723
Inicializando un std :: array 723
Acceso a elementos 724
Comprobando el tamaño de la matriz 726
Iterando a través de la matriz 727
Cambiando todos los elementos de la matriz a la vez 727
Capítulo 122: std :: atómica 728
Examples 728
tipos atómicos 728
Capítulo 123: std :: cualquiera 731
Observaciones 731
Examples 731
Uso básico 731
Capítulo 124: std :: forward_list 732
Introducción 732
Observaciones 732
Examples 732
Ejemplo 732
Métodos 733
Capítulo 125: std :: function: Para envolver cualquier elemento que sea llamable 735
Examples 735
Uso simple 735
std :: función utilizada con std :: bind 735
std :: función con lambda y std :: bind 736
`function` sobrecarga 737
Enlace std :: función a diferentes tipos de llamada 738
Almacenando argumentos de funciones en std :: tuple 740
Capítulo 126: std :: integer_sequence 742
Introducción 742
Examples 742
Gire un std :: tuple en parámetros de función 742
Crear un paquete de parámetros que consiste en enteros. 743
Convertir una secuencia de índices en copias de un elemento. 743
Capítulo 127: std :: iomanip 745
Examples 745
std :: setw 745
std :: setprecision 745
std :: setfill 746
std :: setiosflags 746
Capítulo 128: std :: map 749
Observaciones 749
Examples 749
Elementos de acceso 749
Inicializando un std :: map o std :: multimap 750
Borrando elementos 751
Insertando elementos 752Iterando sobre std :: map o std :: multimap 754
Buscando en std :: map o en std :: multimap 754
Comprobando el número de elementos 755
Tipos de mapas 755
Mapa regular 755
Multi-Mapa 756
Hash-Map (Mapa desordenado) 756
Creando std :: map con tipos definidos por el usuario como clave 756
Ordenamiento estricto y débil 757
Capítulo 129: std :: opcional 758
Examples 758
Introducción 758
Otros enfoques opcionales 758
Opcional vs puntero 758
Opcional vs Sentinel 758
Opcional vs std::pair<bool, T> 758
Usando opcionales para representar la ausencia de un valor. 758
Usando opcionales para representar el fallo de una función. 759
opcional como valor de retorno 760
valor_o 761
Capítulo 130: std :: par 762
Examples 762
Creando un par y accediendo a los elementos. 762
Comparar operadores 762
Capítulo 131: std :: set y std :: multiset 764
Introducción 764
Observaciones 764
Examples 764
Insertando valores en un conjunto 764
Insertar valores en un multiset 765
Cambiar el tipo predeterminado de un conjunto 766
Orden predeterminado 767
Orden personalizado 767
Tipo lambda 768
Otras opciones de clasificación 768
Buscando valores en set y multiset 768
Eliminar valores de un conjunto 769
Capítulo 132: std :: string 771
Introducción 771
Sintaxis 771
Observaciones 772
Examples 772
Terrible 772
Reemplazo de cuerdas 773
Reemplazar por posición 773
Reemplazar las ocurrencias de una cadena con otra cadena 773
Concatenación 774
Accediendo a un personaje 775
operador [] (n) 775
en (n) 775
frente() 775
atrás() 776
Tokenizar 776
Conversión a (const) char * 777
Encontrar caracteres en una cadena 778
Recorte de caracteres al inicio / final 778
Comparacion lexicografica 780
Conversión a std :: wstring 781
Usando la clase std :: string_view 782
Recorriendo cada personaje 783
Conversión a enteros / tipos de punto flotante 783
Convertir entre codificaciones de caracteres. 784
Comprobando si una cadena es un prefijo de otra 785Convertir a std :: string 786
Capítulo 133: std :: variante 788
Observaciones 788
Examples 788
Basic std :: uso variante 788
Crear punteros pseudo-método 789
Construyendo un `std :: variant` 790
Capítulo 134: std :: vector 791
Introducción 791
Observaciones 791
Examples 791
Inicializando un std :: vector 791
Insertando Elementos 792
Iterando Sobre std :: vector 794
Iterando en la dirección hacia adelante 794
Iterando en la dirección inversa 794
Hacer cumplir elementos const 795
Una nota sobre la eficiencia 796
Elementos de acceso 796
Acceso basado en índices: 796
Iteradores 799
Usando std :: vector como una matriz C 800
Iterador / Invalidación de puntero 800
Borrando elementos 801
Eliminando el último elemento: 801
Eliminando todos los elementos: 801
Eliminando elemento por índice: 802
Borrar todos los elementos en un rango: 802
Eliminando elementos por valor: 802
Eliminando elementos por condición: 802
Eliminar elementos por lambda, sin crear una función de predicado adicional 802
Borrar elementos por condición de un bucle: 803
Eliminar elementos por condición de un bucle inverso: 803
Encontrando un Elemento en std :: vector 804
Convertir una matriz a std :: vector 805
vector : La excepción a tantas, tantas reglas 806
Tamaño y capacidad del vector 807
Vectores de concatenacion 809
Reduciendo la capacidad de un vector 810
Uso de un vector ordenado para la búsqueda rápida de elementos 810
Funciones que devuelven grandes vectores 812
Encuentre el elemento máximo y mínimo y el índice respectivo en un vector 813
Matrices usando vectores 814
Capítulo 135: Técnicas de refactorización 816
Introducción 816
Examples 816
Recorrer la refactorización 816
Ir a la limpieza 818
Capítulo 136: Tipo de borrado 820
Introducción 820
Examples 820
Mecanismo basico 820
Borrado a un tipo regular con vtable manual 821
Una función `std :: function` solo para movimiento 824
Borrado hasta un búfer contiguo de T 826
Borrado de tipos Borrado de tipos con std :: any 828
Capítulo 137: Tipo de Devolución Covarianza 834
Observaciones 834
Examples 834
1. Ejemplo de base sin devoluciones covariantes, muestra por qué son deseables 834
2. Versión de resultado covariante del ejemplo base, comprobación de tipos estática. 8353. Resultado del puntero inteligente covariante (limpieza automatizada). 836
Capítulo 138: Tipo de rasgos 838
Observaciones 838
Examples 838
Rasgos de tipo estándar 838
Constantes 838
Funciones 838
Los tipos 839
Escribe relaciones con std :: is_same 839
Rasgos fundamentales de tipo 840
Tipo de propiedades 841
Capítulo 139: Tipo de retorno final 843
Sintaxis 843
Observaciones 843
Examples 843
Evite calificar un nombre de tipo anidado 843
Expresiones lambda 843
Capítulo 140: Tipos atómicos 845
Sintaxis 845
Observaciones 845
Examples 845
Acceso multihilo 845
Capítulo 141: Tipos sin nombre 847
Examples 847
Clases sin nombre 847
Miembros anónimos 847
Como un alias de tipo 848
Anonima union 848
Capítulo 142: Typedef y alias de tipo 849
Introducción 849
Sintaxis 849
Examples 849
Sintaxis básica de typedef 849
Usos más complejos de typedef. 849
Declarando múltiples tipos con typedef 850
Declaración de alias con "utilizando" 850
Capítulo 143: Uniones 852
Observaciones 852
Examples 852
Características básicas de la unión 852
Uso típico 852
Comportamiento indefinido 853
Capítulo 144: Usando std :: unordered_map 854
Introducción 854
Observaciones 854
Examples 854
Declaración y uso 854
Algunas funciones básicas 854
Capítulo 145: Utilizando declaración 856
Introducción 856
Sintaxis 856
Observaciones 856
Examples 856
Importando nombres individualmente desde un espacio de nombres 856
Volver a declarar miembros de una clase base para evitar ocultar el nombre 856
Heredando constructores 857
Capítulo 146: Valor y semántica de referencia 858
Examples 858
Copia profunda y soporte de movimiento. 858
Definiciones 860
Capítulo 147: Variables en linea 862
Introducción 862
Examples 862
Definición de un miembro de datos estáticos en la definición de clase 862
Hosting: Drive (Descarga Directa Para Desktop y Mobile)
Archivo: Pdf
Idioma: Español
Peso: (5 Mb)