ما الفرق بين constexpr و const في لغة C++؟
مرحبًا! لقد بدأت مؤخرًا في تعلم C++11 وصادفت الكلمة المفتاحية `constexpr`. أفهم أن `const` تعني أن قيمة المتغير لا يمكن تغييرها بعد التهيئة. لكن `constexpr` أيضًا تجعل المتغير ثابتًا. إذن ما الفرق؟
على سبيل المثال، يمكنني كتابة:
```cpp
const int x = 5;
constexpr int y = 5;
```
كلا الخيارين يعملان. لكنني سمعت أن `constexpr` يمكن استخدامها مع الدوال. جربت:
```cpp
constexpr int square(int n) {
return n * n;
}
int main() {
const int a = square(5); // هل يعمل؟
constexpr int b = square(5); // هل يعمل أيضًا؟
int arr[ square(3) ]; // هل يمكن ذلك؟
}
```
هذا يتم ترجمته، لكنني لا أفهم ما هي الميزة الحقيقية. متى يجب استخدام `constexpr` بدلاً من `const`؟ ولماذا لا يكفي `const` فقط؟ يبدو لي أن هذا تكرار للوظائف. اشرح لي، من فضلك، مع أمثلة عن متى تستخدم كلًا منهما. شكرًا مقدمًا!