Salió la nueva versión de C++: qué cambió en el lenguaje de programación
El comité internacional de estandarización de C++ (ISO/IEC JTC1/SC22/WG21) aprobó oficialmente la siguiente versión del estándar: C++23. Esta versión trae mejoras largamente esperadas que hacen que el lenguaje sea más seguro, expresivo y conveniente para el desarrollo tanto de software de sistema como de aplicaciones. Contamos las novedades más significativas.
Principales cambios en C++23
1. std::print — salida formateada sin esfuerzo adicional
Una de las características más notables fue la aparición de la función std::print. Ahora para la salida al flujo estándar no es necesario escribir construcciones voluminosas con std::cout o usar printf con riesgo de errores de tipo. std::print funciona basándose en std::format, garantizando seguridad de tipos y legibilidad:
- Formateo automático de números, cadenas y tipos definidos por el usuario.
- Soporte para configuraciones regionales y Unicode.
- Velocidad cercana a
printf, pero sin fugas de memoria.
2. Trabajo mejorado con corrutinas
Las corrutinas, que aparecieron por primera vez en C++20, recibieron una serie de correcciones y adiciones. En C++23 se simplificó la sintaxis de declaración de funciones asíncronas, y también se agregó soporte para std::generator — un nuevo tipo para crear secuencias de valores sobre la marcha:
- Los generadores permiten escribir cálculos perezosos sin gestión manual del estado.
- Se redujo la cantidad de código repetitivo para trabajar con corrutinas.
3. Módulos — estabilidad y rendimiento
Aunque los módulos se introdujeron en C++20, su implementación en los compiladores dejaba mucho que desear. En el nuevo estándar se aclararon las reglas de exportación e importación, lo que llevó a:
- Reducción del tiempo de compilación de proyectos grandes en 2–3 veces.
- Compatibilidad total con archivos de cabecera (modo híbrido).
- Posibilidad de crear módulos para la biblioteca estándar (experimental).
4. Nuevas capacidades de constexpr y consteval
La ampliación del contexto de expresiones constantes es uno de los principales objetivos del desarrollo de C++. En C++23 se permite usar constexpr para:
- Asignación dinámica de memoria (
std::vectorystd::string). - Llamada a funciones virtuales.
- Trabajo con punto flotante sin pérdida de precisión.
Esto permite realizar cada vez más cálculos en tiempo de compilación, acelerando el runtime.
5. Atributo [[assume]] — sugerencias al optimizador
El nuevo atributo [[assume(expresión)]] le indica al compilador que la expresión es verdadera en ese punto del código. Esto proporciona:
- Optimizaciones más agresivas (eliminación de bifurcaciones, plegado de bucles).
- Mayor rendimiento en secciones críticas (motores de juegos, embedded).
6. Simplificación de la concurrencia
Se agregaron nuevos tipos para sincronización: std::counting_semaphore con rendimiento mejorado y std::latch para barreras de un solo uso. Además, apareció soporte para std::mdspan