Inicialización en C++
$14.99
Precio mínimo
$19.99
Precio sugerido

Inicialización en C++

Una guía a través de todas las opciones de inicialización y áreas relacionadas con C++

Sobre este libro

¡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

Este libro es una traducción al Español de C++ Initialization Story, que fue originalmente escrito en Inglés.

Sobre de los autores

Bartłomiej Filipek
Bartłomiej Filipek

Bartłomiej (Bartek) Filipek es un desarrollador de software de C++ de la bella ciudad de Cracovia, al sur de Polonia. Inició su carrera profesional en 2007 y se graduó de la Universidad Jagiellonian con una Maestría en Ciencias de la Computación.

Bartek actualmente trabaja en Xara, donde desarrolla funciones para editores de documentos avanzados. También tiene experiencia con aplicaciones de gráficos de escritorio, desarrollo de juegos, sistemas a gran escala para la aviación, escritura de controladores de gráficos e incluso la biorretroalimentación. En el pasado, Bartek también ha enseñado programación (principalmente cursos de programación de juegos y gráficos) en universidades locales en Cracovia.

Desde 2011 Bartek ha escrito blogs regularmente en bfilipek.com y últimamente en cppstories.com. Inicialmente, los temas giraban en torno a la programación de gráficos, pero ahora el blog se centra en las características principales de C++. También es coorganizador del Grupo de Usuarios de C++ en Cracovia. Puedes escuchar a Bartek en un episodio de @CppCast donde habla sobre C++17, blogs y procesamiento de texto.

Desde octubre de 2018, Bartek ha sido un Experto de C++ para el Organismo Nacional Polaco que trabaja directamente con ISO/IEC JTC 1/SC 22 (el comité internacional ISO para la normalización del lenguaje C++). En el mismo mes, Bartek recibió su primer título de MVP para los años 2019 - 2023 por Microsoft.

En su tiempo libre, le encanta coleccionar y montar modelos de Lego con su pequeño hijo.

Bartek es el autor de C++17 en detalle

Lorenzo Javier Estrada
Javier Estrada

Javier Estrada es un desarrollador de software de C++ en Silicon Valley en el norte de California. Inició su carrera profesional en 1988 y se graduó del Instituto Tecnológico de Chihuahua con una Ingeniería Industrial en Electrónica.


Javier trabaja actualmente como Ingeniero Principal de Software en Motorola Solutions, donde desarrolla software para seguridad pública (9-1-1 Emergency) en C++ y Java. Javier también trabajó para VMware en el equipo que produce vRealize Aria Suite (anteriormente vRealize Suite), y para Samsung Semiconductor USA (SSI) en un grupo de desarollo e investigación de almacenamiento de discos de estado sólido (SSD) y su aplicación en sistemas operativos, bases de datos, y aprendizaje de máquinas. En el pasado Javier ha impartido cursos de programación en Python y Java para equipos de robótica de escuelas preparatorias regionales en el sur de California.


Javier publica en su blog Se Habla C++, donde trata temas generales y reseñas de presentaciones en CppCon por distintos autores. Puedes ver su perfil profesional en LinkedIn.


Javier es el traductor de C++17 - La guía completaLambdas en C++ y es uno de los editores principales de la Referencia de C++. Puedes escuchar a Javier en pláticas relámpago en CppCon:

En su tiempo libre, Javier disfruta discutir C++ con su hija, una buena partida de ajedrez, y leer un buen libro.

Tabla de contenidos

  • Sobre el libro
    • ¿Por qué debes leer este libro?
    • Objetivos de aprendizaje
    • Estructura del libro
    • Para quién es este libro
    • Requisitos previos
    • Retroalimentación del lector y errata
    • Código de ejemplo
    • Formateo y secciones especiales
  • Sobre el autor
  • Sobre el traductor
  • Agradecimientos
  • Historial de revisiones
  • 1. Objetos locales
    • Empezar con tipos simples
    • Puesta de los valores en cero
    • Copia e inicialización directa
    • Inicialización con agregados
    • Inicialización por defecto de datos miembro
    • Resumen
  • 2. Inicialización con constructores
    • Definición de una clase
    • Fundamentos de los constructores
    • Cuerpo de un constructor
    • Agregar constructores a DataPacket
    • Constructores por defecto generados por el compilador
    • Constructores explícitos y conversiones
    • Diferencia entre inicialización directa y por copia
    • Conversión implícita y constructores de conversión
    • Resumen de los constructores
  • 3. Operaciones de copia y movimiento
    • Constructor de copia
    • Constructor de movimiento
    • Distinguir de la asignación
    • Agregar el registro de depuración a los constructores
    • Clases triviales y constructores por defecto proporcionados por el usuario
    • Resumen
  • 4. Constructores delegadores y herederos
    • Constructores delegadores
    • Limitaciones
    • Herencia
    • Constructores herederos
    • Resumen
  • 5. Destructores
    • Conceptos básicos
    • Objetos asignados en el montículo de memoria
    • Destructores y datos miembro
    • Destructores virtuales y polimorfismo
    • Objetos creados parcialmente
    • Un destructor generado por el compilador
    • Resumen y casos de uso
  • 6. Deducción de tipos e inicialización
    • Deducción con auto
    • Acerca de las categorías de valor en C++
    • Reglas para la deducción de tipo auto
    • Deducción con decltype
    • Imprimir información de tipo
    • Vínculos estructurados a partir de C++17
    • Deducción de argumentos de plantilla para plantillas de clase
    • Extensión del tiempo de vida, referencias y bucles
    • Casi siempre auto (AAA)
    • Resumen
  • 7. Cuestionario de los capítulos 1…6
  • 8. Inicialización de datos miembro no estáticos
    • Cómo funciona
    • Investigación
    • Experimentos
    • Otras formas de NSDMI
    • Constructor de copia y NSDMI
    • Constructor de movimiento y NSDMI
    • Cambios en C++14
    • Cambios en C++20
    • Limitaciones de NSDMI
    • NSDMI: ventajas y desventajas
    • Resumen
  • 9. Contenedores como datos miembro
    • Fundamentos
    • Usar std::initializer_list
    • Implementación del ejemplo
    • El costo de copiar elementos
    • Algunos inconvenientes - tipos no copiables
    • Más opciones (avanzado)
    • Resumen
  • 10. Datos miembro no regulares
    • Datos miembro constantes no estáticos
    • Punteros como datos miembro
    • Punteros inteligentes como datos miembro
    • Referencias como datos miembro
    • Resumen
  • 11. Objetos no locales
    • Duración de almacenamiento y enlace
    • Inicialización de objetos estáticos no locales
    • constinit en C++20
    • Variables estáticas en el ámbito de una función
    • Sobre los datos miembro estáticos
    • Motivación para las variables en línea
    • Variables globales en línea (inline)
    • constexpr y variables inline
    • Resumen
  • 12. Agregados e inicializadores designados en C++20
    • Agregados en C++20
    • Los conceptos básicos de los inicializadores designados
    • Reglas
    • Ventajas de la inicialización designada
    • Ejemplos
    • Resumen
  • 13. Técnicas y casos de uso
    • Uso de explicit para tipificación fuerte
    • La mejor manera de inicializar datos miembro de tipo std::string
    • Reducción de copias adicionales a través de emplace e in_place
    • El modismo copiar-e-intercambiar
    • Contador de clase usando el modismo CRTP
    • Varios tipos de inicialización en una clase
    • Singleton de Meyer y C++11
    • Fábrica con tipos de autorregistro e inicialización estática
    • Resumen
  • 14. El cuestionario final y ejercicios
    • Ejercicios
  • Apéndice A – Reglas para la generación de funciones miembro especiales
    • El diagrama
    • Reglas
  • Apéndice B - Cuestionario y respuestas a los ejercicios
    • El cuestionario de los capítulos del 1 al 6
    • El cuestionario final
    • Solución al primer problema de codificación, NSDMI
    • Solución al segundo problema de codificación, NSDMI
    • Solución al tercer problema de codificación, inline
    • Solución al cuarto problema de codificación, corrección de código
  • Referencias
  • Notas

Leanpub incondicional, sin riesgo, 100% de felicidad garantizada

Durante los primeros 60 días de compra, puedes obtener un reembolso del 100% de cualquier compra Leanpub, en dos clics. Procesamos las restituciones manualmente, así que puede tomarse unos días en aparecer. Véase términos completos.

80% de regalías. Gana $16 en un libro de $20.

Pagamos 80% de regalías. No es un error tipográfico: ganas $16 en una venta de $20. Si vendemos 5000 copias no reembolsadas de tu libro o curso por $20, ganarás $80,000.

(Sí, algunos autores ya han ganado mucho más que eso en Leanpub.)

De hecho, los autores han ganadomás de $12 millonesescribiendo, publicando y vendiendo en Leanpub.

Aprende más sobre cómo escribir en Leanpub

Actualizaciones gratis. Libre de DRM.

¡Si compras un libro Leanpub obtienes actualizaciones gratis siempre y cuando el autor actualice el libro! Varios autores usan Leanpub para publicar sus libros en progreso mientras los escriben. Todos los lectores obtienen actualizaciones gratis, independientemente de cuándo compraron el libro o cuánto pagaron (incluyendo si fue gratis).

La mayoría de los libros Leanpub se encuentran disponibles en PDF (para computadores) y EPUB (para teléfonos, tabletas, y Kindle). Los formatos que un libro incluye se muestran en la esquina superior derecha de esta página.

Finalmente, los libros Leanpub no tienen ninguna de las cosas sin sentido sobre protección de copia DRM, así que puedes leerlos fácilmente en cualquier dispositivo que se soporta.

Aprende más sobre los formatos de Leanpub y dónde puedes leerlos

Escribir y publicar en Leanpub

Los autores y editores usan Leanpub para publicar libros electrónicos sorprendentes en curso y completados, como éste. ¡También puedes utilizar Leanpub para escribir, publicar y vender tu libro! Leanpub es una potente plataforma para autores serios, que combina un flujo de trabajo de escritura y publicación simple y elegante con una tienda centrada en la venta de libros electrónicos en progreso. Leanpub es una máquina de escribir mágica para los autores: basta con escribir en texto plano, y para publicar tu libro electrónico, simplemente haz clic en un botón. Realmente es así de fácil.

Más información sobre cómo escribir en Leanpub