¡La inicialización en C++ es un tema candente! El Internet está lleno de debates sobre las mejores prácticas, e incluso hay memes divertidos sobre ese tema. La situación no es sorprendente, ya que hay más de una docena de formas de inicializar un valor entero simple, reglas complejas para la deducción de tipos automáticos, datos miembro y matices del tiempo de vida de objetos.
Y aquí viene el libro.
A lo largo de este texto, aprenderás opciones prácticas para inicializar varias categorías de variables y datos miembro en C++ moderno. Más específicamente, este texto enseña varios tipos de inicialización, constructores, inicialización de datos miembro no estáticos, variables en línea, inicializadores designados y más. Además, verás los cambios y las nuevas técnicas de C++11 a C++20 y muchos ejemplos para completar tu comprensión.
¡Aprende C++ desde la perspectiva de la inicialización en C++!
El plan es explicar la mayoría (si no todas) las partes de la inicialización, aprender muchas técnicas excelentes de C++ y ver qué sucede debajo del capó o cofre.
El objetivo de este libro es equiparte con los siguientes conocimientos:
- Explicar las reglas sobre la inicialización de objetos, incluidas las variables regulares, los datos miembro y los objetos no locales.
- Cómo implementar funciones miembro especiales (constructores, destructores, operaciones de copia/movimiento) y cuándo son útiles.
- Cómo inicializar eficientemente datos miembro no estáticos usando funciones de C++11, tales como inicialización de datos miembro no estáticos, constructores herederos y delegadores.
- Cómo agilizar el trabajo con variables estáticas y datos miembro estáticos con variables `inline` de C++17.
- Cómo trabajar con miembros tipo contenedor, datos miembro no copiables (como datos miembro `const`) o datos miembro que solo se pueden mover, o incluso lambdas.
- Qué es un agregado y cómo crear tales objetos con inicializadores designados de C++20.
El libro contiene 14 capítulos con la siguiente estructura:
- Los capítulos 1 a 5 crean una base para el resto del libro. Cubren las reglas básicas de inicialización, los constructores, los destructores y los conceptos básicos de los datos miembro.
- El capítulo 6 es un breve cuestionario sobre constructores. Puedes comprobar tus conocimientos desde la primera "parte" del libro.
- El capítulo 7 trata sobre la deducción de tipos.
- El capítulo 8 describe la inicialización de datos miembro no estáticos (NSDMI por sus siglas en inglés), una potente característica de C++11 que mejora la forma en que trabajamos con datos miembro. Al final del capítulo, puede resolver algunos ejercicios.
- El capítulo 9 analiza cómo inicializar datos miembro similares a contenedores.
- El capítulo 10 contiene información sobre datos miembro no regulares y cómo manejarlos en una clase. Aprenderás sobre `const`, `unique_ptr` como datos miembro y referencias.
- El capítulo 11 describe variables estáticas no locales, objetos estáticos, varias opciones de duración de almacenamiento y variables `inline` de C++17 y `constinit` de C++20.
- El capítulo 12 pasa a C++20 y describe los inicializadores designados, una función útil basada en algo similar del lenguaje C.
- El capítulo 13 muestra varias técnicas, como pasar cadenas a constructores, tipificación firme, un contador de clases de patrón de plantilla curiosamente recurrente (o CRTP por sus siglas en inglés), copiar e intercambiar expresiones idiomáticas del lenguaje, y más.
- El capítulo 14 es el cuestionario final con preguntas de todo el libro.
Y hay dos apéndices:
- Apéndice A – una guía útil sobre las reglas para las funciones miembro especiales generadas por el compilador.
- Apéndice B – respuestas a cuestionarios y ejercicios.
¿Para quién es este libro?
El libro está destinado a programadores de C++ principiantes o intermedios que desean aprender varios aspectos de la inicialización en C++ moderno (de C++11 a C++20).
Debes conocer al menos algunos de los aspectos básicos de la creación y el uso de clases personalizadas.
Este texto también es útil para los programadores experimentados que conocen los estándares de C++ más antiguos y desean pasar a C++17/C++20.
Puedes ver las reseñas para la versión en inglés del libro en:
C++ Initialization Story by Bartłomiej Filipek @Goodreads