2011-06-27 7 views
12

Hice una búsqueda para esta pregunta pensando que alguien debe haberla preguntado antes. No encontré ningún resultado, por lo que si lo ha sido, publique el enlace y no dude en cerrar la pregunta.¿Qué hace este colon en una declaración enum?

me encontré con este código en EASTL:

enum : size_type { // size_type = size_t     
       npos  = (size_type)-1, 
       kMaxSize = (size_type)-2 
      }; 

nunca he encontrado una declaración enum así. ¿Qué hace el : en este caso?

Respuesta

8

Ésta es una extensión de Microsoft que le permite elegir el tipo de base de los valores de enumeración. Por ejemplo, esto le permite especificar que los valores no están firmados (los compiladores de Microsoft generalmente eligen firmarse por defecto) o que solo ocupan 8 o 16 bits (Microsoft normalmente tiene un valor predeterminado de 32 bits).

La sintaxis está documentada aquí: http://msdn.microsoft.com/en-us/library/2dzy4k6e(v=VS.100).aspx pero no puedo encontrar documentación oficial de lo que realmente hace.

C++ 11 agrega una característica similar, pero con una sintaxis ligeramente diferente. En C++ 11 lo escribiría así:

enum class MyEnum : size_type { .. values .. }; 
13

En C++ 0x, puede especificar el tipo subyacente para la enumeración. En este caso, será size_type.

(Y puede estar soportado como una extensión en otros lugares antes de C++ 0x, obviamente.)

+1

Creo que C++ 0x requiere 'clase enum' cuando se especifica el tipo subyacente. Sin la 'clase', debe ser una extensión compilador-proveedor. –

+1

@Jesse: Ah, está bien. +1 a tu respuesta. – GManNickG

+1

@Jesse: en realidad, el código sin 'clase 'funciona bien en C++ 11 y posterior. El uso de 'enum class' o' enum struct' en lugar de plain 'enum' solo hace que la enumeración * alcance * en lugar de * unscoped *, es decir, previene las conversiones enteras implícitas. Proporcionar el tipo subyacente es posible en cualquier caso. – Frank

Cuestiones relacionadas