Fundamentos del lenguaje
27 pasos en 9 series de C++.
C++ es donde el rendimiento y la abstracción se niegan a ceder: motores de juegos, navegadores, sistemas de trading y buena parte del software sobre el que se construye el resto del software. El lenguaje premia saber qué década de él estás escribiendo — y el C++ moderno es un lenguaje mucho mejor que su reputación: auto, el for de rangos, los punteros inteligentes y los algoritmos estándar reemplazaron casi todos los filos que recuerdan las historias de terror.
Este tour cubre el núcleo moderno: tipos por valor y referencias, los contenedores e iteradores sobre los que se construye todo, lambdas y la biblioteca de algoritmos, RAII y unique_ptr, clases con la regla del cero y el kit de cadenas y streams. El bis entrega programas completos. Cada fragmento compila como unidad de traducción bajo g++ -std=c++20 -Wall, y el bis corre de principio a fin.
Valores y referencias
- Variables y autoDeclara el tipo cuando importa; deja que
autolo deduzca cuando el inicializador ya lo dice todo. - Referencias y constUna referencia es un segundo nombre del mismo objeto;
const &es el préstamo de solo lectura de C++. - Cadenas básicas
std::stringes dueña de sus caracteres y te da concatenación, búsqueda y rebanado como métodos.
Control de flujo
- If y switchFiltra la entrada rara con
ify deja queswitchreparta el rango normal en casos. - El for de rangosEl bucle que recorre un contenedor completo sin índice, sin iterador y sin el clásico error de uno.
- While y do-while
whilepregunta antes de cada pasada;do-whilecorre el cuerpo una vez antes de preguntar.
Contenedores
- Operaciones con vector
std::vectores el contenedor por defecto: un arreglo que crece, con todo el kit incluido. - Búsqueda en map
std::mapmantiene las claves ordenadas y da tres entradas: el subíndice,containsyfind. - Sets y unicidad
std::setguarda cada valor una sola vez, ordenado, y suinsertinforma si hizo algo.
Funciones y lambdas
- Sobrecarga de funcionesUn nombre, tres firmas: el compilador elige el
twicecorrecto solo por el tipo del argumento. - Capturas de lambdasLa lista de captura decide qué ve una lambda: copia privada con
[base], acceso en vivo con[&total]. - Argumentos por defectoLos parámetros finales tienen valores de fallback: un solo
joinsirve para tres formas de llamada.
Algoritmos
- Ordenar con rangosEl
std::ranges::sortde C++20 toma el contenedor completo y cualquier orden que le des. - transform y accumulateMap y luego reduce, al estilo de la biblioteca estándar:
std::transformeleva,std::accumulatesuma. - find y countTres preguntas sobre un vector, cada una resuelta con una llamada a un algoritmo en vez de un bucle a mano.
Clases y RAII
- La regla del ceroSi cada miembro se limpia solo, la clase no declara destructor, ni copia, ni movimiento: cero miembros especiales.
- Constructores e inicialización de miembrosLos miembros se inicializan antes de que corra el cuerpo del constructor: la lista
:es la asignación real. - Propiedad con unique_ptrUn solo dueño a la vez:
std::unique_ptrborra lo que sostiene, y solostd::movepuede cederlo.
Cadenas y streams
- string_viewUna ventana a los caracteres de otro: subcadenas sin copias, verificadas en tiempo de compilación.
- Streams de cadenasArma cadenas con
<<y vuelve a leerlas con>>, sin ninguna conversión manual a la vista. - std::formatLa respuesta de C++20 a printf: plantillas verificadas por tipo, con alineación, precisión y bases.
Toques modernos
- optional y value_orQuizás-un-valor sin números centinela:
std::optionalconvierte la entrada mala en un no limpio. - Enlaces estructuradosDesempaca pares y entradas de map en variables con nombre — se acabaron
.firsty.second. - Enums con ámbito
enum classmantiene los enumeradores fuera del ámbito circundante y lejos del int implícito.
Bis
- word_freq.cppUn reporte de frecuencia de palabras sobre un pasaje embebido, con un solo
std::mapcontando. - grade_report.cppPromedios y mejores notas por estudiante, impresos como una tabla alineada con
std::format. - temp_stats.cppMínimo, máximo y media sobre una docena de lecturas embebidas, cortesía de
std::ranges.