Documentación de C++
Referencia concisa y basada en ejemplos de C++. Lee el concepto, mira el código y practícalo en un recorrido de Coddy.
Inicia un recorrido guiado de C++Primeros pasos
- Qué es C++Qué es realmente C++, por qué se compila directamente a código máquina nativo y los tipos de software de alto rendimiento que se construyen con él.
- Instalar C++Cómo instalar un compilador de C++ (GCC, Clang o MSVC), elegir una cadena de herramientas para tu sistema operativo y comprobar que funciona desde la línea de comandos.
- Compilar C++Cómo C++ convierte el código fuente .cpp en un ejecutable nativo: compila con g++ (o clang++/MSVC), ejecuta el binario y lee los errores del compilador cuando algo falla.
- Sintaxis de C++Las reglas básicas de sintaxis de un programa de C++ - sentencias y punto y coma, bloques entre llaves, la función main y cómo funciona la salida - explicadas a partir de un primer programa.
- ComentariosCómo escribir comentarios en C++ - notas de una línea // y bloques multilínea /* */ - además de cómo comentar código, por qué los comentarios de bloque no se anidan y qué hace que un comentario valga la pena.
Variables y tipos
- VariablesCómo funcionan las variables en C++: declararlas con un tipo, la diferencia entre asignación e inicialización, la inicialización con llaves, las reglas de nombres y el ámbito que decide dónde vive y muere una variable.
- Tipos de datosUn recorrido práctico por los tipos de datos fundamentales de C++ - enteros, coma flotante, char y bool - además de tamaños, signed frente a unsigned, literales y sufijos, desbordamiento y cómo elegir el tipo adecuado.
- Palabra clave autoCómo la palabra clave `auto` deja que el compilador deduzca el tipo de una variable por ti: qué descarta, dónde brilla y las trampas que pillan a los principiantes.
- Constantes y constCómo declarar valores de solo lectura en C++ con const, la diferencia entre const y constexpr, punteros const frente a punteros a const, y funciones miembro const.
- OperadoresAprende los operadores de C++ - aritméticos, de comparación, lógicos, de asignación y a nivel de bits - además de las trampas relacionadas con la división entera, la precedencia y el cortocircuito.
- Conversión de tiposCómo funciona la conversión de tipos en C++: conversiones implícitas, la trampa de la división entera y los cuatro casts con nombre (static_cast, const_cast, reinterpret_cast, dynamic_cast), con los detalles que causan pérdida silenciosa de datos.
Flujo de control
- if-elseCómo tomar decisiones en C++ con if, else if y else: condiciones, encadenar ramas, anidamiento, el operador ternario, if con inicializador y los errores que suelen confundir a la gente.
- switchLa sentencia switch de C++ explicada: etiquetas case, break y fall-through, la rama default, agrupar casos, hacer switch sobre enums y los problemas con las declaraciones dentro de los casos.
- bucle forCómo repetir código con el bucle for de C++: el encabezado de tres partes, contar hacia arriba y hacia abajo, recorrer arrays, anidar, break y continue, y los errores de desplazamiento por uno y de tipos sin signo que afectan a todos.
- Bucles whileEl bucle while de C++ explicado: el while que comprueba primero la condición, el do-while que se ejecuta al menos una vez, repetir hasta un valor centinela, break y continue, y cómo evitar bucles infinitos.
- for basado en rangoEl bucle for basado en rango de C++ explicado: iteración limpia sobre arrays, vectores, strings y maps, por qué deberías usar auto& y const auto&, y los problemas de copia e invalidación de iteradores que debes evitar.
Funciones
- FuncionesCómo escribir funciones en C++: la anatomía de tipo de retorno/nombre/parámetros, declaraciones frente a definiciones, devolver valores, funciones void y errores típicos como olvidar el return o el prototipo.
- Parámetros de funcionesCómo llegan los argumentos a las funciones de C++: paso por valor frente a por referencia, referencias const para acceso de solo lectura barato, argumentos por defecto, punteros y los problemas de coste de copia que ralentizan los programas sin que te des cuenta.
- ReferenciasLas referencias en C++ explicadas: cómo el & en un parámetro crea un alias, por qué el paso por referencia evita copias y permite que una función modifique las variables de quien la llama, y cuándo usar const& y referencias en lugar de devolver valores.
- Sobrecarga de funcionesLa sobrecarga de funciones en C++ permite que varias funciones compartan un mismo nombre siempre que sus listas de parámetros difieran. Aprende cómo la resolución de sobrecarga elige la versión correcta, por qué el tipo de retorno por sí solo no cuenta y las trampas de ambigüedad y argumentos por defecto que debes evitar.
- LambdasEscribe pequeñas funciones en línea sobre la marcha con las lambdas de C++: la sintaxis, cómo funcionan las capturas, cuándo usar `mutable` y la trampa de la captura colgante que pilla a todo el mundo.
Punteros y memoria
- PunterosLos punteros de C++ explicados desde cero: cómo declarar un puntero, los operadores & (dirección de) y * (desreferencia), nullptr, punteros a arreglos y los errores con punteros colgantes y no inicializados que provocan fallos.
- Referencias vs punterosUna comparación práctica entre referencias y punteros en C++: qué comparten, en qué se diferencian (reasignación, nulo, aritmética) y una regla clara para saber a cuál recurrir en el día a día.
- Memoria dinámicaCómo reservar memoria en tiempo de ejecución con `new`, liberarla con `delete` y evitar las fugas, los punteros colgantes y las dobles liberaciones que conlleva gestionar el heap a mano.
- Punteros inteligentesLos punteros inteligentes poseen memoria del heap y la liberan automáticamente. Aprende `unique_ptr`, `shared_ptr`, `make_unique` y `make_shared`, y por qué casi nunca deberías volver a escribir `new`/`delete`.
Cadenas y E/S
- CadenasCómo usar `std::string` en C++: construir, unir, buscar y cortar texto de forma segura, y por qué casi nunca conviene un `char*` crudo para trabajo real.
- Entrada y salidaCómo funciona la E/S por consola en C++: imprimir con cout, leer con cin, el clásico error del salto de línea con getline tras cin y cómo recuperarte cuando la entrada falla.
- Flujos de cadenasCómo usar std::stringstream, istringstream y ostringstream para analizar texto, dividir cadenas por espacios en blanco, convertir entre cadenas y números, y construir cadenas formateadas en memoria.
Contenedores de la STL
- ArraysLos arrays nativos de C++ explicados: cómo declararlos e inicializarlos, indexar de forma segura, recorrerlos usando su tamaño, la trampa de la degradación de array a puntero y por qué std::array y vector suelen ser mejores.
- vectorstd::vector es el array redimensionable de C++: el contenedor que deberías usar por defecto. Aprende a crear, acceder, hacer crecer y recorrer un vector, además de los problemas de invalidación de iteradores y de acceso fuera de rango.
- mapEl std::map de C++ explicado: un contenedor clave-valor ordenado con búsqueda logarítmica. Inserta, busca, itera y evita el clásico fallo de operator[] que inserta claves sin avisar.
- unordered_mapAprende std::unordered_map en C++: el hermano de map basado en tabla hash que ofrece inserción y búsqueda en O(1) promedio. Cubre las operaciones básicas, la trampa de la inserción automática de [], count frente a find y cuándo elegirlo en lugar de un map ordenado.
- setCómo std::set almacena valores únicos y ordenados automáticamente en C++: insertar, comprobar la pertenencia con count y find, iterar en orden y las diferencias entre set, multiset y unordered_set.
- pair y tupleCómo `std::pair` y `std::tuple` agrupan dos o más valores en un solo objeto: cómo crearlos, acceder a los campos, los structured bindings y dónde encaja cada uno.
- IteradoresCómo funcionan los iteradores de C++ como punteros generalizados hacia los contenedores: begin() y end(), desreferenciar, avanzar, las variantes const/reverse y los problemas de invalidación y de desreferenciar end() que provocan comportamiento indefinido.
Algoritmos y plantillas de la STL
- AlgoritmosUsa los algoritmos estándar de C++ - `find`, `count_if`, `transform`, `accumulate`, `remove` - para trabajar de verdad sobre rangos sin escribir bucles a mano, además de los detalles del par de iteradores y del idiom erase-remove.
- OrdenaciónOrdena vectores y arrays en C++ con `std::sort`: orden por defecto, comparadores personalizados, ordenar structs por un campo y la trampa del orden débil estricto que provoca caídas.
- PlantillasEscribe el código una sola vez y deja que funcione con cualquier tipo gracias a las plantillas de C++: plantillas de función, plantillas de clase, deducción de tipos y los confusos errores de compilación que provocan.
Clases y objetos
- ClasesAprende cómo las clases de C++ agrupan datos y comportamiento en tipos reutilizables: declarar variables miembro y métodos, crear objetos, la división public/private y trampas como los miembros sin inicializar y el puntero this.
- ConstructoresUn constructor es la función miembro especial que se ejecuta cuando se crea un objeto. Aprende los constructores por defecto, parametrizados y de copia, las listas de inicialización de miembros y cómo evitar dejar objetos a medio inicializar.
- DestructoresUn destructor se ejecuta automáticamente cuando un objeto se destruye. Aprende la sintaxis `~NombreClase()`, cuándo se dispara, por qué libera recursos y la Regla de Tres/Cinco.
- HerenciaAprende cómo la herencia en C++ permite que una clase derivada reutilice y amplíe una clase base: la sintaxis, herencia pública frente a privada, el orden de constructores y destructores, y trampas como el recorte de objetos (slicing).
- Funciones virtualesLas funciones virtuales permiten que un puntero a la clase base llame en tiempo de ejecución a la versión del método de la clase derivada. Aprende `virtual`, `override`, las clases abstractas y por qué el destructor de la base debe ser virtual.
- Sobrecarga de operadoresLa sobrecarga de operadores en C++ permite que tus propios tipos funcionen con operadores integrados como +, == y <<. Aprende las reglas de funciones miembro frente a no miembro, cómo sobrecargar los operadores de comparación y de flujo, y los detalles delicados sobre los tipos de retorno y el operador de asignación.
- Especificadores de accesoCómo public, private y protected controlan quién puede tocar los miembros de una clase en C++: la base del encapsulamiento, con getters, setters y la válvula de escape friend.
- StructsLos structs de C++ explicados: cómo agrupar variables relacionadas en un solo tipo, declarar e inicializar objetos struct, dotar a un struct de funciones miembro y constructores, y en qué se diferencia realmente struct de class.
- enumsAprende los enums de C++: cómo declararlos, por qué el enum class con ámbito es más seguro que el enum simple, valores subyacentes personalizados, usar switch sobre enumeradores y convertir hacia y desde enteros.
Errores y depuración
- ExcepcionesLas excepciones informan de errores que una función no puede manejar localmente. Aprende a usar `throw`, cuáles son los tipos de excepción estándar, el mensaje de `what()` y por qué las excepciones superan a los códigos de retorno para los fallos que de verdad importan.
- try-catchEnvuelve el código arriesgado en `try` y reacciona en `catch`. Aprende a capturar excepciones por referencia constante, ordenar varios manejadores, usar `catch (...)` y relanzar, sin perder recursos.
- Comportamiento indefinidoEl comportamiento indefinido (UB) es código sobre el que el estándar de C++ no impone ninguna regla: puede fallar, corromper datos o parecer que funciona. Aprende las causas comunes, por qué "funcionó bien" no demuestra nada y las herramientas que detectan el UB.