const vs constexpr للمتغيرات في C++: ما الفرق وماذا تختار؟
مرحبًا بالجميع! أنا أدرس C++11/14 وأشعر بالحيرة بشأن الفرق بين `const` و `constexpr` عند تعريف المتغيرات. أفهم أن كلتا الكلمتين المفتاحيتين تجعل المتغير غير قابل للتغيير، لكن الجميع يكتبون أنهما ليسا نفس الشيء.\n\nهذا مثال يربكني:\n\n```cpp\nconst int x = 42; // الخيار 1\nconstexpr int y = 42; // الخيار 2\n\nconst int z = foo(); // يعمل\nconstexpr int w = foo(); // خطأ في الترجمة إذا كانت foo() ليست constexpr\n```\n\nقرأت أن `constexpr` يضمن الحساب في وقت الترجمة، بينما `const` لا يضمن ذلك. ولكن لماذا نحتاج إلى `const` إذا كان `constexpr` أكثر صرامة؟ ولماذا أرى في المشاريع الحقيقية استخدامًا واسعًا لـ `const` للمتغيرات المعروفة بوضوح في وقت الترجمة؟\n\nسؤال آخر: إذا كتبت `const int size = 10;` و