Todo se puede aprender
...si se quiere.
Home » , » Empezando con C++ - Creado por Stack OverFlow

Empezando con C++ - Creado por Stack OverFlow

Este tutorial ha sido preparado para que los principiantes los ayuden a comprender lenguaje C++ Programación. Después de completar este tutorial, se encontrará con un nivel moderado de experiencia en lenguaje C++ desde donde puede pasar a los siguientes niveles.

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)

Empezando con C++ - Creado por Stack OverFlow