type para libreria example enum c++ c++11 enums c++1z is-class

para - enum type c++ example



¿Es "clase enum" un tipo de clase en C++? (2)

A pesar de la palabra clave class , las enumeraciones no son clases. Esa palabra clave solo significa que los enumeradores deben respetar ciertas reglas de alcance (y también previene las conversiones integrales implícitas).

La elección de la palabra clave se debe a los aspectos provocados por el nuevo tipo 1 y a la forma en que los enumeradores seleccionados se piratearon en la era anterior a C ++ 11 para obtener dichos aspectos:

struct Enum { // could just as well be a class. enum { red = 1, blue, green }; };

Lo cual solo permitía acceder a los enumeradores a través del nombre calificado. Sin embargo, no evitó las conversiones implícitas, como las enumeraciones verdaderas.

is_class está destinado a identificar los tipos agregados de clase / estructura.

1 B. Stroustrup - C ++ 11 Preguntas frecuentes

Leí sobre la declaración de enumeración en C ++ utilizando cppreference .

Luego hice la clase Enum y verifico si es un tipo de clase o no usando std::is_class .

#include <iostream> enum class Enum { red = 1, blue, green }; int main() { std::cout << std::boolalpha; std::cout << std::is_class<Enum>::value << ''/n''; }

Luego compilé y ejecuté el compilador G ++ en la plataforma Linux, imprime valores false .

Entonces, ¿es el tipo de clase enum o no? Si enum es un tipo de clase, ¿por qué obtengo un valor falso ?


enum class no es una definición de class : la combinación de palabras clave se usa para definir una enumeración con ámbito , que es una entidad completamente separada de una class .

std::is_class correctamente devuelve false aquí. Si usa std::is_enum , devolverá true .

Del estándar :

El tipo de enumeración declarado con una clave enum de solo enum es una enumeración sin ámbito, y sus enumeradores son enumeradores sin ámbito. Las enum-keys enum class y enum struct son semánticamente equivalentes; un tipo de enumeración declarado con uno de estos es una enumeración con ámbito, y sus enumeradores son enumeradores del ámbito.

No se menciona que una enum class sea ​​un "tipo de class " en ninguna parte del Estándar.