ما الفرق بين 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`؟