Se ha lanzado el nuevo estándar C++23: qué ha cambiado y cómo afectará al desarrollo
El comité internacional de estandarización de C++ (ISO/IEC JTC1/SC22/WG21) ha aprobado oficialmente la nueva versión del lenguaje — C++23. Este lanzamiento no es tan fundamental como C++11 o C++20, pero incluye muchas mejoras largamente esperadas que harán que el código sea más seguro, expresivo y eficiente. Analicemos las principales novedades que todo desarrollador de C++ debe conocer.
Principales cambios en C++23
- Deducing this (P0847R7) — la novedad más esperada. Ahora se puede especificar explícitamente el objeto sobre el que se llama al método, lo que simplifica la sobrecarga para lvalue/rvalue, versiones constantes y no constantes, y elimina la duplicación de código en plantillas CRTP.
- std::expected (P0323R12) — un tipo para el manejo de errores sin excepciones, alternativa a std::optional y las excepciones. Permite devolver un valor o un error, algo crítico para sistemas con estrictos requisitos de rendimiento.
- Módulos std (P2465R3) — la biblioteca estándar ahora se exporta a través de módulos, lo que acelera la compilación y mejora el aislamiento del código. Por ejemplo,
import std;reemplaza decenas de#include. - Mejoras en corrutinas — se ha añadido el tipo
std::generatorpara secuencias perezosas y se han corregido muchos problemas de rendimiento y ergonomía de las corrutinas de C++20. - Multihilo — nuevo mecanismo
std::latchystd::barrierpara la sincronización de hilos, así como unstd::counting_semaphoremejorado.
¿Qué significa esto para los desarrolladores?
C++23 no rompe la compatibilidad hacia atrás, pero introduce nuevas prácticas. Por ejemplo, deducing this simplifica la escritura de bibliotecas, y std::expected reemplazará gradualmente las engorrosas comprobaciones de códigos de retorno. Muchos compiladores (GCC 13+, Clang 16+, MSVC 2022 17.6+) ya soportan parte de las funcionalidades.
Para quienes trabajan con sistemas de alta carga, son especialmente importantes los módulos (aceleración de la compilación del 20-40%) y la mejora en el manejo de errores sin excepciones. Si usa C++20, la migración a C++23 no requerirá reescribir el código — basta con activar el nuevo flag de compilación.
¿Cuándo se espera soporte completo?
Se espera soporte completo de C++23 en los compiladores para finales de 2024. Por ahora se pueden probar funcionalidades individuales con los flags -std=c++2b (GCC/Clang) o /std:c++latest (MSVC). Recomendamos empezar con std::expected y deducing this — son los más útiles en proyectos reales.
Ejemplos de código actualizados y comparaciones con C++20 los encontrará en la documentación de los compiladores. C++23 es un paso evolutivo que hace que el lenguaje sea más seguro y cómodo, sin sacrificar el rendimiento.