Vamos a repasar las principales versiones de C++, con sus mejoras y modificaciones más importantes.
C++ ha evolucionado considerablemente desde su creación, adaptándose a los nuevos desafíos y tendencias en el desarrollo de software.
Así que aquí tenéis un listado y su fecha de lanzamiento.
C++
Comentario
Pre
Primera versión "C con clases"
C++
Se añade POO
C++1.0
Versión comercial
C++98
Primer estándar ISO
C++03
Corrección de errores
C++11
Gran actualización
C++14
Mejoras menores
C++17
Actualización importante
C++20
Actualización importante
C++23
Simplificación y mejoras
C++26
(en desarrollo)
Características por versión
C++98 (1998)
C++98 fue la primera estandarización oficial de C++ por la Organización Internacional de Normalización (ISO).
- Introducción de la Biblioteca Estándar (STL): Incluyó contenedores y algoritmos en la STL, como
vector
,map
,set
,list
, etc., que permitieron una mayor eficiencia y facilidad de uso en la manipulación de datos. - Templates y Excepciones: Mejoró el soporte para programación genérica mediante templates, así como el manejo de excepciones (
try
,catch
,throw
). - Input y Output con Streams: Introducción del sistema de flujos (
iostream
) para entrada y salida de datos en lugar de la bibliotecastdio.h
de C.
C++03 (2003)
- Actualización de la Biblioteca Estándar: Mejoras en los contenedores y en las funciones de la STL para optimizar su rendimiento y estabilidad.
- Estabilidad en Templates: Se mejoró la implementación de templates, resolviendo limitaciones que se encontraron tras su uso en C++98.
C++11 (2011)
- Auto y
decltype
: Permiten deducir automáticamente el tipo de las variables, facilitando la escritura y el mantenimiento del código. - Lambdas y Funciones Anónimas: Introducción de funciones lambda, que permite definir funciones en línea, algo útil para la programación funcional y para reducir código repetitivo.
- Move Semantics y Rvalue References: Introducción de la semántica de movimiento para optimizar la gestión de memoria, sobre todo en operaciones de copia y asignación.
- Multihilo con
std::thread
: Soporte para programación concurrente y multihilo a través destd::thread
y otras herramientas de concurrencia comomutex
. - Inicialización Uniforme: Nueva forma de inicializar variables y contenedores de manera más intuitiva y sin ambigüedad.
- Smart Pointers (
std::unique_ptr
,std::shared_ptr
): Punteros inteligentes que ayudan a gestionar la memoria automáticamente, reduciendo problemas de fugas de memoria.
C++14 (2014)
- Mejoras en Lambdas: Posibilidad de capturar variables mediante movimiento, permitiendo un mayor control sobre el uso de datos en funciones lambda.
- Return Type Deduction: Deducción del tipo de retorno en funciones, lo cual hace el código más limpio y permite una mayor flexibilidad.
std::make_unique
: Nueva función para facilitar la creación destd::unique_ptr
sin necesidad de especificar el tipo explícitamente.- Mejoras en
constexpr
: Expansión deconstexpr
para evaluar más expresiones en tiempo de compilación.
C++17 (2017)
std::optional
,std::variant
, ystd::any
: Nuevos tipos que simplifican la gestión de valores opcionales (optional
), tipos de datos con múltiples opciones (variant
) y variables de tipo dinámico (any
).- If y Switch con Inicializadores: Permite declarar y asignar variables en la misma línea que una sentencia
if
oswitch
. - Parallel STL: Introducción de operaciones paralelas en algoritmos de la STL, optimizando el rendimiento en aplicaciones multihilo.
- Nuevas Herramientas para Control de Memoria: Con
std::byte
para manipulación de bytes de bajo nivel ystd::string_view
para trabajar con substrings de manera eficiente. - Librería
filesystem
: Nueva biblioteca para manejar archivos y directorios de manera directa y estándar.
C++20 (2020)
- Conceptos: Permiten definir restricciones para tipos de datos en templates, mejorando la claridad y el control en programación genérica.
- Rangos (
ranges
): Facilita la manipulación de secuencias y colecciones de datos, simplificando el código. - Coroutines: Introducción de corutinas para facilitar la programación asincrónica y cooperativa.
- Módulos: Alternativa a los archivos de encabezado tradicionales, que mejora el tiempo de compilación y organiza mejor el código.
std::format
: Nueva biblioteca para formatear strings, similar aprintf
pero más flexible y segura.- Espacios de Nombres (
namespace
) Integrados: Soporte para espacios de nombres anidados que simplifica la organización y la lectura de código.
C++23 (2023)
- Expansión de
std::expected
: Introducción destd::expected
para gestionar retornos que pueden fallar, ofreciendo una alternativa a las excepciones. - Continuación en coroutines: Mejora en el soporte de corutinas para simplificar el manejo de funciones asincrónicas.
- Mejoras en módulos: Refinamientos en el sistema de módulos introducido en C++20, haciéndolo más flexible y optimizado.
- Mayor integración con
constexpr
: Nuevas capacidades deconstexpr
que permiten evaluar en tiempo de compilación más tipos de funciones y expresiones. - Compatibilidad con sistemas de tipos más seguros: Incluye más tipos de seguridad en la biblioteca estándar y mejora la interoperabilidad con lenguajes modernos.