¿Por qué se considera que enum class es más seguro que enum normal en C++?
¡Hola a todos! Recientemente comencé a estudiar C++ y me encontré con las enumeraciones. Sé que hay dos formas de declararlas: el viejo `enum` y el nuevo `enum class` (desde C++11). Leí que `enum class` es "más seguro", pero no entiendo bien cuál es la diferencia en la práctica.
Aquí hay un ejemplo que escribí:
```cpp
enum Color { RED, GREEN, BLUE };
enum TrafficLight { RED, GREEN, YELLOW }; // Error: redeclaración de RED y GREEN
int main() {
Color c = RED;
TrafficLight t = RED; // Esperaba que esto funcionara, pero...
return 0;
}
```
Inmediatamente tuve problemas: no puedo declarar dos enumeraciones con los mismos nombres de elementos, y el compilador se queja. Además, noté que puedo escribir algo como:
```cpp
int x = RED; // Esto funciona, pero ¿es normal? RED no es un número en sentido estricto.
if (c == 0) { ... } // Comparar un color con un número — ¿es esto siquiera legal?
```
Por favor, explíquenme cómo puede ayudarme `enum class`. ¿Cómo resuelve estos problemas? Y si...