Avatar ·

ماذا تعني الكلمة المفتاحية explicit في لغة C++؟ متى ولماذا يجب استخدامها؟

مرحباً بالجميع! لقد بدأت للتو في تعلم لغة C++ ووجدت الكلمة المفتاحية `explicit`. فهمت أنها تُستخدم قبل المنشئات، لكنني لا أفهم تماماً لماذا هي مطلوبة وفي أي الحالات يجب استخدامها. لدي كلاس بسيط للعمل مع المتجه (Vector): ```cpp class Vector { public: Vector(int size) { data = new int[size]; sz = size; } private: int* data; int sz; }; ``` يمكنني كتابة كود مثل هذا: ```cpp Vector v = 10; // لماذا يعمل هذا؟! ``` يقوم المترجم بترجمته دون أخطاء. لكن هل `10` ليست مجرد رقم؟ لماذا تتحول فجأة إلى كائن من نوع Vector؟ هل هذا تحويل ضمني؟ يبدو لي هذا خطيراً، لأنني قد أُمرر رقماً عن طريق الخطأ إلى مكان يُتوقع فيه كائن، وسيتصرف البرنامج بشكل غريب. على سبيل المثال، إذا كان لدي دالة: ```cpp void processVector(Vector v) { /* ... */ } int main() { processVector(42); // خطأ؟ أم لا؟ الآن هذا يعمل! return 0; } ``` أحتاج