Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: candidatopardo en 18 de Febrero 2016, 08:01

Título: C++ tipos enumerados enum rangos en que están definidos validez de índices
Publicado por: candidatopardo en 18 de Febrero 2016, 08:01
Hace aproximadamente un año compre un libro por amazon que estaba de oferta sobre C++, que me llamo bastante la atención. El libro se llama c++ primer plus, la quinta edición. Hoy tengo entendido que al menos van por la sexta.

El libro da una explicación acerca de los tipos enumerados que es la siguiente:

Originalmente, los únicos valores validos para los tipo enumerado son aquellos nombrados en la declaración:

enum bits {one = 1, two = 2, four = 8, eight = 8}
bits myFlag = bits(6) // Un error segun la explicación que acabo de dar.

Pero c++ ha expandido la lista de valores validos que puedes utilizar a traves del uso de una conversión de tipo (como la que hemos utilizado en la segunda sentencia). Cada enumeración tiene un rango, y tu puedes asignar cualquier entero en el rango.

El rango se define de una manera particular:

Según todo este procedimiento bits tiene un rango válido de 0-15



¡Vale! Hasta ahí la explicación y yo creo que se entiende bastante bien. A ver el libro es viejo, no se cuanto pero lo suficiente. Porque yo para hacer pruebas he creado un programa y he hecho algo así.

enum bits {one = 1, two = 2, four = 8, eight = 8}
bits myFlag = bits(59);
bits myFlag2 = bits(-500);

Y el programa no me suelta ningún tipo de error como sería de esperar, después de la explicación que acababa de leer. Lo que si ha hecho es almacenarme los valores bits(59) y bits(-500).

Algo ha cambiado con los tipos enumerado, ¿el que?
Título: Re:C++ tipos enumerados enum rangos en que están definidos validez de índices
Publicado por: César Krall en 20 de Febrero 2016, 14:05
Hola!

Tanto en C como en C++ puedes encontrar distintos compiladores y no todos ellos funcionan igual. Aunque pueda parecer extraño, un programa que lanza un error usando un compilador puede compilar y ejecutarse perfectamente en otro sistema. Con esto pueden ocurrir varias cosas. Una es que el compilador tenga detalles distintos a otro compilador, aún usando el mismo estándar del lenguaje. Otro es que el compilador trabaje con distintos estándares del lenguaje. Tanto C como C++ tienen distintas versiones y estándares.

Por otro lado muchos compiladores de estos lenguajes admiten programas donde intuitivamente esperamos que aparezca un error. Por ejemplo si declaras un array de enteros de nombre deporte de 3 elementos, lo esperable, al menos con muchos lenguajes, es que si invocas deporte[12] te salte un error. Sin embargo puedes encontrarte con que el compilador se lo trague y el programa se ejecute.

En esta entrega del curso C se comenta esta situación aparentemente anómala y que debe ser tenida en cuenta http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=901:arrays-unidimensionales-arreglos-o-formaciones-en-c-declaracion-y-limites-indices-ejemplos-cu00512f&catid=82:curso-basico-programacion-lenguaje-c-desde-cero&Itemid=210 

Saludos!