Unspecified vs Undefined

El estándar de C++ no especifica qué ocurre con todas y cada una de las expresiones válidas, sino que deliberadamente deja muchos huecos con detalles poco específicos: los llamados comportamientos no definidos (undefined behavior), no especificados (unspecified) o dependientes de la implementación (implementaiton-defined). Este tipo de comportamientos poco especificados aparecen a lo largo de todo el estándar y, de hecho, gran cantidad de código que es sintácticamente correcto los utiliza e incluso consigue que funcione como se espera que funcione. Sin embargo, depender de funcionalidades que van más allá de lo especificado en el estándar disminuye la portabilidad y reusabilidad futura de nuestro código.

Veremos las diferencias entre estos tipos de comportamientos poco definidos, evaluaremos los riesgos de cada uno y revisaremos algunos de los casos más típicos. Tambien rebuscaremos en la biblioteca estándar para encontrar ejemplos, incluyendo algunas novedades introducidas por los nuevos estándares.

[slides]

Juan Soulié es autor del sitio de internet cplusplus.com, donde se encarga de mantener la referencia de la biblioteca estándar. Esto le da innumerables oportunidades de ejercer como picapleitos del estándar y de familiarizarse con sus entresijos. Nacido en Palma de Mallorca, actualmente es consultor independiente y entusiasta de C++ en la zona de Toulouse, Francia.