Avatar ·

ما الفرق بين constexpr و const في C++؟

مرحبًا بالجميع! بدأت في تعلم C++11 ووجدت الكلمة المفتاحية الجديدة `constexpr`. كنت دائمًا أستخدم `const` للإعلان عن متغيرات غير قابلة للتغيير. لكن الآن ظهر أيضًا `constexpr`، ولا أستطيع فهم متى أستخدم أيًا منهما. على سبيل المثال، أكتب هذا الكود: ```cpp const int size = 5; int arr[size]; // هذا يعمل ``` لكن إذا كتبت: ```cpp int get_size() { return 5; } const int size = get_size(); int arr[size]; // خطأ في الترجمة في المعايير القديمة! ``` أفهم أن `const` يمنع تغيير المتغير بعد التهيئة فقط، لكنه لا يضمن أن القيمة معروفة في وقت الترجمة. في نفس الوقت، أرى أمثلة مع `constexpr`: ```cpp constexpr int square(int x) { return x * x; } constexpr int val = square(5); // حسنًا، تُحسب في وقت الترجمة ``` الأسئلة: 1. ما الفرق الجوهري بين `const` و `constexpr` للمتغيرات؟ 2. متى يجب استخدام `constexpr` للدوال؟ 3. هل يمكن لـ `constexpr` أن تحل محل `const`؟