Avatar ·

لماذا يعتبر 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`؟ كيف يحل هذه المشكلات؟ وهل هناك