Lanzamiento de C++23: resumen de los cambios clave del nuevo estándar

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Lanzamiento de C++23: resumen de los cambios clave del nuevo estándar



Ha ocurrido un evento significativo en el mundo de los lenguajes de programación: el comité internacional de estandarización de C++ (ISO/IEC JTC1/SC22/WG21) ha aprobado oficialmente una nueva versión del lenguaje: C++23. Este lanzamiento, que reemplaza a C++20, no es revolucionario, pero contiene muchas mejoras esperadas y útiles que harán que el código sea más limpio, seguro y eficiente. Analicemos las novedades más importantes.



Principales novedades de C++23



1. std::print y std::println — el reemplazo moderno de cout

Quizás el cambio más notable para la programación diaria. Se han añadido a la biblioteca estándar las funciones std::print y std::println, basadas en el potente formateo de std::format (C++20). Ahora la salida a la consola no solo es más conveniente, sino también significativamente más rápida que con std::cout.

  • Ejemplo: std::println("¡Hola, {}! Respuesta: {}", nombre, 42);
  • Ventajas: seguridad de tipos, sintaxis legible, soporte para Unicode.


2. deducing this (P0847R7) — especificación explícita de this

Una de las novedades más potentes para la metaprogramación y la creación de bibliotecas. Ahora es posible pasar explícitamente el objeto this como parámetro de una función miembro. Esto resuelve problemas antiguos con lambdas y CRTP (Curiously Recurring Template Pattern).

  • Permite escribir una única función miembro que funciona tanto con objetos const como no const.
  • Simplifica la implementación del patrón "sobrecarga por calificadores".


3. Operadores operator[] multidimensionales (P2128R6)

Una capacidad largamente esperada: ahora operator[] puede aceptar múltiples argumentos. Esto es fundamental para bibliotecas que trabajan con arreglos multidimensionales (por ejemplo, mdspan o matrices propias).

  • Antes: matriz(2, 3) o matriz[{2,3}]
  • Ahora: matriz[2, 3] — natural y conciso.


4. std::expected — manejo funcional de errores

Alternativa a las excepciones y los códigos de retorno. El tipo std::expected<T, E> contiene un valor correcto o un error. Esto es especialmente valioso en sistemas donde las excepciones están prohibidas (sistemas embebidos, núcleos de SO).



5. Mejoras en módulos y conceptos

Los módulos (C++20) recibieron correcciones y estabilización. Ahora tienen mejor soporte por parte de los compiladores. Los conceptos se han vuelto más flexibles, añadiendo la posibilidad de usar auto en los parámetros de los conceptos.



¿Qué más vale la pena destacar?

  • std::mdspan — span multidimensional para trabajar con arreglos.
  • Correcciones en std::ranges — estabilización y cierre de brechas en la API.
  • Atributo [[assume]] — sugerencias al compilador para optimización.
  • Llamadas estáticas a operator() — posibilidad

Recommended Libraries