Avatar ·

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;` واستخدمته