C++
¿Qué es C++?
Introducción breve a C++, sus orígenes, para qué se usa hoy y por qué sigue siendo relevante.
¿Qué es exactamente?
C++ es un lenguaje de programación de propósito general, compilado y de tipado estático, creado como una extensión de C que añade soporte para programación orientada a objetos, genérica y, más recientemente, funcional. Combina control de bajo nivel sobre la memoria y el hardware con abstracciones de alto nivel, lo que lo convierte en una herramienta poco habitual: rápido como C, pero expresivo como los lenguajes modernos.
Los archivos fuente de C++ suelen usar las extensiones .cpp, .cc, .cxx o .C, y los archivos de cabecera .h o .hpp. Todas son equivalentes para el compilador; la elección es cuestión de convención del proyecto.
Vas a ver std::algo en prácticamente todos los ejemplos de esta documentación, incluso antes de que se explique en detalle. Si en algún momento te encuentras con algo de std:: (o con std::vector, std::array) que todavía no se explicó, la sección Standard Library — más adelante en este mismo índice — cubre qué es y qué trae. No hace falta que la leas ahora: es la página a la que volver cuando algo de std:: no te haga sentido.
Orígenes e historia
C++ fue creado por Bjarne Stroustrup en los laboratorios Bell a finales de los años 70, inicialmente bajo el nombre “C with Classes”. El objetivo era añadir el concepto de clases (inspirado en Simula) a la eficiencia de C. El nombre “C++” apareció en 1983, como un juego de palabras con el operador de incremento ++.
Desde entonces el lenguaje se ha estandarizado por el comité ISO, con revisiones importantes cada pocos años:
| Estándar | Año | Novedades destacadas |
|---|---|---|
| C++98 | 1998 | Primer estándar formal, plantillas, STL |
| C++11 | 2011 | auto, lambdas, smart pointers, move semantics |
| C++14 | 2014 | Mejoras menores sobre C++11 |
| C++17 | 2017 | std::optional, if constexpr, structured bindings |
| C++20 | 2020 | Concepts, coroutines, módulos, ranges |
| C++23 | 2023 | Mejoras a ranges, std::expected, ajustes de STL |
Paradigmas que soporta
C++ es multiparadigma: no obliga a un único estilo de diseño. Entre los enfoques que conviven en el mismo lenguaje están:
- Programación estructurada: heredada directamente de C.
- Programación orientada a objetos: clases, herencia, polimorfismo virtual.
- Programación genérica: plantillas (templates) que permiten escribir código independiente del tipo.
- Programación funcional: lambdas,
std::function, algoritmos de la STL con predicados.
¿Dónde se usa hoy?
A pesar de tener más de cuatro décadas, C++ sigue siendo el lenguaje elegido cuando el rendimiento y el control de recursos importan:
- Motores de videojuegos (Unreal Engine, id Tech, motores propietarios).
- Sistemas operativos y drivers.
- Software financiero de baja latencia (trading de alta frecuencia).
- Aplicaciones de escritorio pesadas (navegadores, editores, IDEs).
- Sistemas embebidos y robótica.
- Herramientas de audio, video y renderizado en tiempo real.
Comparación rápida C vs C++
| Característica | C | C++ |
|---|---|---|
| Paradigma | Estructurado | Multiparadigma (OOP, genérico, funcional) |
| Gestión de memoria | Manual (malloc/free) | Manual, RAII o smart pointers |
| Sobrecarga de funciones | No | Sí |
| Plantillas / genéricos | No | Sí (template) |
| Biblioteca estándar | libc | STL (contenedores, algoritmos, <iostream>) |
Un primer vistazo al código
#include <iostream>
int main() {
std::cout << "Hola, mundo desde C++" << std::endl;
return 0;
}Aunque parezca un ejemplo trivial, ya muestra varias particularidades del lenguaje frente a C: el uso de std::cout (parte de la biblioteca estándar de flujos) en lugar de printf, y el espacio de nombres std, que agrupa toda la biblioteca estándar para evitar colisiones de nombres.
Si quieres compilar y correr este ejemplo tú mismo pero todavía no tienes g++ instalado, la página de instalación y uso del compilador cubre Windows, macOS y Linux paso a paso.
¿Por qué aprender C++ en 2026?
- Sigue siendo la base de la mayoría de motores gráficos y de videojuegos, incluido Dear ImGui, que usaremos más adelante en esta documentación.
- El estándar moderno (C++11 en adelante) es mucho más seguro y expresivo que el C++ “clásico” que mucha gente todavía imagina.
- Entender C++ facilita aprender otros lenguajes de sistemas (Rust, C) y comprender mejor cómo funciona el hardware por debajo de las abstracciones.
Si vienes de un lenguaje con recolector de basura (Python, JavaScript, C#), el mayor cambio mental no es la sintaxis: es aprender a razonar sobre quién es responsable de liberar cada recurso. Ahí es donde entran conceptos como RAII y los smart pointers.