Herb Sutter, miembro de Microsoft y presidente del comité de estándares de C++ de la ISO anunció este viernes pasado que el resultado de las votaciones ha sido el de aprobar por unanimidad la actualización del lenguaje de programación C++, en un paquete de cambios que se viene llamando C++0X desde hace años de manera demasiado optimista: finalmente se llamará C++11.
Según Bjarne Stroustrup, el creador de C++, «uno tiene la impresión de que se ha creado un lenguaje nuevo». Y eso que algunas apuestas fuertes como las de los «concepts» finalmente se han quedado en el tintero.
La última versión pública del estándar es este borrador (PDF)…. de 1300 páginas.
![]() |
Bjarne Stroustrup, se habrá quedado así de a gusto (fuente) |
Pero si no tienes ganas de leer, aquí va un resumen de las novedades más importantes con respecto al último estándar de 2003:
- Funciones lambda anónimas. A este tema ya le dediqué una entrada completa con ejemplos, etc.
- Referencias rvalue (T&&). A diferencia de un «const T&», se pueden cambiar tras su inicialización. Permitirá usar un estándar para «move semantics«, es decir, asignaciones o constructores copia («move constructors», a partir de ahora) que destruyan el objeto origen. Puedes leer esta breve introducción (en inglés).
- Tipo de dato auto detectado por el compilador. La keyword «auto» nos ahorrará mucho teclear y permite aún más flexibilidad en metaprogramación.
- Listas de inicialización de objetos: Una extensión del antiguo «T d[] = { val1, val2, …};»
- Constructores: Ahora unos constructores se pueden llamar a otros, ahorrando código duplicado.
- Templates con número variable de argumentos: Al estilo de las clásicas funciones con «(…)».
- Actualización de la «librería estándad de C++»: Esto se refiere a todas esas clases en el namespace «std::*». Se han incluido los cambios del tr1, que ya desde hace tiempo estaban disponibles gracias a la librería boost. Este cambio realmente incluye docenas de nuevas utilidades que modernizan una barbaridad el lenguaje C++: smart pointers, nuevas herramientas para metaprogramación, array (un contenedor STL de tamaño fijo), tablas hash, expresiones regulares, etc.
Para leer más sobre esta actualización a mi lenguaje de programación favorito (¡y debería serlo también tuyo!) recomiendo estos artículos:
- http://www.artima.com/cppsource/cpp0x.html
- http://www2.research.att.com/~bs/C++0xFAQ.html
- http://drdobbs.com/cpp/231002092
(Update 21:15pm) Por desgracia en estos tiempos en que las universidades priman enseñar lo que demanda «el mercado», me temo que es necesario recordar qué es C++: Es uno de los lenguajes de programación más potentes, versátiles, portables y eficientes (¡si se sabe usar, que es el quid!). Además, se trata del tercer lenguaje de programación más usado del mundo (según estas encuestas 1, 2).