🚀 C++ — 1985

⬅️ Atlas · 🧟 Lenguajes que siguen vivos · 📚 Índice de clases

Como C, está en esta lista sin ser legacy. C++ tiene cuarenta años y una revisión del estándar cada tres. Lo que ejecuta el videojuego que juegas, el navegador con el que lees esto, el motor de la base de datos que guarda tus datos y el sistema que ejecuta una orden en bolsa en microsegundos está, con altísima probabilidad, escrito en C++.

🎯 Por qué está en este programa

Criterio de inclusión: C++ está completamente vigente, con estándar nuevo cada tres años (C++20, C++23, C++26 en camino) y presencia dominante en varios dominios donde no tiene rival práctico.

Entra porque encarna un concepto que ningún otro lenguaje del núcleo expresa igual: la abstracción de coste cero. La promesa de C++ es que puedes escribir código de alto nivel —plantillas, objetos, algoritmos genéricos— y obtener el mismo código máquina que habrías escrito a mano en C. Y su segunda gran idea, RAII, resuelve la gestión de recursos atándola al tiempo de vida de un objeto: es la respuesta que precede al ownership de Rust y al defer de Go, y entenderla ilumina a las dos. C++ ya aparece como primo de la familia C en cada primos.md del programa; esta ficha es su historia y su porqué.

Año 1979 como "C con clases"; 1985 como C++; ISO desde 1998
Autoría Bjarne Stroustrup, Bell Labs
Familia C / llaves
Paradigma Multiparadigma: procedimental, OO, genérico y funcional
Tipado Estático, fuerte, con inferencia (auto) y metaprogramación de tipos
Memoria Manual con RAII: punteros inteligentes, destructores deterministas
Ejecución Compilado a nativo
Estado 🟢 Completamente vigente — videojuegos, navegadores, finanzas, HPC, robótica

📜 Historia

Bjarne Stroustrup había trabajado con Simula 67, el lenguaje que inventó las clases, y le había convencido su capacidad para modelar problemas. También le había desesperado su lentitud. Cuando en 1979 llegó a Bell Labs, quiso las abstracciones de Simula con el rendimiento y el acceso al hardware de C. Empezó con un preprocesador llamado C con clases, y en 1985 publicó el lenguaje con el nombre C++ —el operador de incremento de C, un chiste que se convirtió en marca.

La regla de diseño que ha gobernado el lenguaje desde entonces es explícita y explica casi todo lo demás: no debes pagar por lo que no usas. Si no utilizas excepciones, no cuestan; si no usas funciones virtuales, no hay tabla de despacho. Esa promesa es lo que le permitió entrar donde ningún otro lenguaje de alto nivel podía.

La cronología moderna se divide en dos épocas:

La crítica constante es su tamaño: el estándar supera las mil quinientas páginas y hay más de un "C++" posible según el subconjunto que se elija. Es una crítica justa, y la comunidad responde con guías —las C++ Core Guidelines de Stroustrup y Herb Sutter— que definen qué subconjunto usar.

🏭 Dónde vive hoy

🧠 Por qué no es legacy

1. Nadie más ocupa ese punto exacto. C++ es el único lenguaje ampliamente disponible que combina control total sobre la memoria y el hardware, abstracción de alto nivel sin sobrecoste, y un ecosistema maduro en gráficos, cálculo científico y sistemas. Rust se acerca por un lado, pero su ecosistema en dominios como los motores gráficos o la instrumentación científica está a décadas de distancia.

2. Rendimiento predecible sin recolector de basura. En un motor de videojuego que debe entregar un fotograma cada 16 milisegundos, o en un sistema de trading, una pausa de recolección es inaceptable. RAII —destructores deterministas ligados al ámbito— da liberación automática de recursos sin pausas impredecibles.

3. La metaprogramación con plantillas es única. Permite generar código especializado en tiempo de compilación: bibliotecas como Eigen producen operaciones con matrices tan rápidas como el ensamblador escrito a mano, a partir de expresiones legibles. Con constexpr y consteval, hoy se puede ejecutar prácticamente cualquier cálculo durante la compilación.

4. Interoperabilidad total con C y, a través de ella, con todo lo demás.

5. Compatibilidad hacia atrás casi obsesiva. Código de 1998 sigue compilando. Es su mayor lastre —arrastra construcciones que nadie recomienda— y a la vez la razón de que la industria haya podido apostar por él durante treinta años sin reescribir.

🔄 Lo que se ha modernizado

El C++ que se escribe hoy no se parece al de 1998, y esa es la parte que más se ignora desde fuera:

⚙️ Cómo se ejecuta hoy

g++ -std=c++23 -Wall -Wextra -O2 total.cpp -o total
clang++ -std=c++23 -fsanitize=address,undefined -g total.cpp -o total

echo "15000 2 0.10" | ./total
# Total: 27000.00

Compiladores: GCC, Clang/LLVM, MSVC e Intel oneAPI. Construcción: CMake, Meson, Bazel. Dependencias: vcpkg, Conan.

🧪 El programa de la clase 041 en C++

#include <iomanip>
#include <iostream>

int main() {
    double precio{}, cantidad{}, descuento{};

    if (!(std::cin >> precio >> cantidad >> descuento)) {
        return 1;
    }

    const double total = precio * cantidad * (1 - descuento);

    std::cout << "Total: " << std::fixed << std::setprecision(2) << total << '\n';
    return 0;
}

Recorrido, y la comparación que importa.

cpp #include <print> std::print("Total: {:.2f}\n", total); // C++23

Esa línea es el C++ que se escribirá a partir de ahora: seguro con los tipos, legible y sin estado global. Merece la pena verla al lado de la anterior para entender hacia dónde va el lenguaje. - Y lo que no aparece porque no hace falta: no hay free, ni delete, ni fugas posibles. El ámbito gestiona todo. Eso es RAII, y es la idea que hay que llevarse.

⚠️ Errores comunes al leerlo

📚 Fuentes y bibliografía


⏮️ Volver al Atlas · 🧟 Los lenguajes que siguen vivos · 🔗 Relacionadas: C · Assembler · Delphi / Object Pascal