constexpr ووقت الترجمة
احسب القيم وقت الترجمة
constexpr ووقت الترجمة درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
ما الذي يعنيه constexpr
تخبر constexpr المصرّف بأن قيمة أو دالة يمكن تقييمها في وقت الترجمة، ما ينتج ثابتًا حقيقيًا في وقت الترجمة.
#include <iostream>
int main() {
constexpr int size = 4 * 4; // computed at compile time
int arr[size];
std::cout << sizeof(arr) / sizeof(int) << "\n";
}دوال constexpr
يمكن تشغيل دالة constexpr في وقت الترجمة عند تزويدها بوسائط ثابتة، وفي وقت التشغيل بخلاف ذلك.
#include <iostream>
constexpr int square(int x) { return x * x; }
int main() {
constexpr int s = square(5); // compile time
int n = 6;
std::cout << s << " " << square(n) << "\n"; // second at runtime
}ثوابت وقت الترجمة في المصفوفات
بما أن قيم constexpr معروفة في وقت الترجمة، يمكنها تحديد أحجام المصفوفات والعمل كوسائط للقوالب.
constexpr في مقابل const
تعني const «لا يمكن تغييرها»، بينما تعني constexpr «معروفة في وقت الترجمة». كل قيمة constexpr ثابتة ضمنيًا، لكن ليست كل قيمة const من النوع constexpr.
#include <iostream>
int main() {
int x;
std::cin >> x;
const int a = x; // const but runtime value
constexpr int b = 10; // compile-time constant
std::cout << b << "\n";
}constexpr العودية
يمكن لدوال constexpr استدعاء نفسها، ما يتيح للمصرّف حساب قيم مثل المضروب قبل تشغيل البرنامج.
#include <iostream>
constexpr long factorial(int n) {
return n <= 1 ? 1 : n * factorial(n - 1);
}
int main() {
constexpr long f = factorial(5); // 120 at compile time
std::cout << f << "\n";
}constexpr أكثر مرونة في C++ الحديثة
منذ C++14، يمكن أن تحتوي دوال constexpr على حلقات ومتغيرات محلية وفروع شرطية، ما يتيح حساب ثوابت معقدة في وقت الترجمة.
#include <iostream>
constexpr int sumTo(int n) {
int total = 0;
for (int i = 1; i <= n; ++i) total += i;
return total;
}
int main() {
constexpr int s = sumTo(100);
std::cout << s << "\n";
}يجب تهيئة متغيرات constexpr في وقت الترجمة
يجب أن يملك المتغير المعرَّف باستخدام constexpr مهيِّئًا يمكن تقييمه في وقت الترجمة، وإلا فلن يُترجم البرنامج.
فوائد الحساب في وقت الترجمة
يعني الحساب في وقت الترجمة انعدام التكلفة في وقت التشغيل، وإمكانية استخدام القيم في السياقات الثابتة، واكتشاف الأخطاء مبكرًا.
constexpr والقوالب
تتوافق قيم constexpr طبيعيًا مع القوالب وstd::array، حيث يجب أن تكون الأحجام والمعاملات ثوابت معروفة في وقت الترجمة.
متى يعود التنفيذ إلى وقت التشغيل
إذا تلقت دالة constexpr وسائط غير ثابتة، فإنها تعمل ببساطة في وقت التشغيل مثل أي دالة عادية — من دون خطأ.
فضّل constexpr للثوابت
استخدم constexpr للثوابت الحقيقية، مثل الأحجام والعمليات الرياضية وجداول البحث. فهو أقدر على التعبير من const، ويتيح ضمانات وقت الترجمة.
تحقق سريع
اختبر مدى فهمك لـ constexpr.
مراجعة
تعلّمت أن constexpr يتيح تقييم المتغيرات والدوال في وقت الترجمة، وأنه يختلف عن const التي تمنع التعديل فقط، ويدعم الحلقات والعودية في C++ الحديثة، ويعود إلى وقت التشغيل عند إعطائه مدخلات غير ثابتة.
الأسئلة الشائعة
هل درس «constexpr ووقت الترجمة» مجاني؟
نعم — نص درس «constexpr ووقت الترجمة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «constexpr ووقت الترجمة»؟
احسب القيم وقت الترجمة تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «constexpr ووقت الترجمة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- متغيرات ومعاملات const
- دوال أعضاء const
- constexpr ووقت الترجمة
- consteval وconstinit