لماذا يعتبر enum class أكثر أمانًا من enum العادي في C++؟
مرحبًا بالجميع! لقد بدأت مؤخرًا في تعلم C++ وواجهت التعدادات. أعلم أن هناك طريقتين لتعريفها: `enum` القديم الجيد و `enum class` الجديد (منذ C++11). قرأت أن `enum class` "أكثر أمانًا"، لكنني لا أفهم تمامًا الفرق عمليًا.
هذا مثال كتبته:
```cpp
enum Color { RED, GREEN, BLUE };
enum TrafficLight { RED, GREEN, YELLOW }; // خطأ: إعادة تعريف RED و GREEN
int main() {
Color c = RED;
TrafficLight t = RED; // توقعت أن يعمل هذا، لكن...
return 0;
}
```
واجهت مشاكل فورًا: لا يمكنني تعريف تعدادين بنفس أسماء العناصر، والمترجم يشتكي. بالإضافة إلى ذلك، لاحظت أنه يمكنني كتابة شيء مثل:
```cpp
int x = RED; // هذا يعمل، لكن هل هذا طبيعي؟ RED ليس رقمًا من حيث المعنى.
if (c == 0) { ... } // أقارن لونًا برقم - هل هذا قانوني أصلًا؟
```
أرجو التوضيح، كيف يمكن أن يساعدني `enum class`؟ كيف يحل هذه المشكلات؟ وهل هناك