consteval وconstinit
تعرّف على الكلمات المفتاحية الحديثة لوقت الترجمة
consteval وconstinit درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
ما بعد constexpr
تضيف C++20 كلمتين مفتاحيتين تعززان البرمجة في وقت الترجمة: consteval للدوال التي يُضمن تشغيلها في وقت الترجمة، وconstinit للتهيئة المضمونة في وقت الترجمة.
consteval: الدوال الفورية
يجب حتمًا تقييم دالة consteval في وقت الترجمة. وبخلاف constexpr، لا يمكنها العمل في وقت التشغيل مطلقًا.
consteval int cube(int x) {
return x * x * x;
}
int main() {
constexpr int c = cube(3); // OK: compile time
return c;
}يرفض consteval الاستدعاءات وقت التشغيل
يؤدي استدعاء دالة consteval بقيمة وقت تشغيل إلى خطأ في الترجمة — إذ يُفرض هذا الضمان.
consteval int cube(int x) { return x * x * x; }
int main() {
int n = 4;
// int bad = cube(n); // ERROR: n is not a constant
return cube(2);
}لماذا consteval؟
استخدمها عندما لا يكون للحساب معنى في وقت التشغيل — مثل إنشاء جدول ثابت أو التحقق من صحة قيمة حرفية في وقت الترجمة.
constexpr في مقابل consteval
قد تعمل دوال constexpr في وقت الترجمة، أما دوال consteval فتعمل فيه دائمًا. اختر consteval لمنع الاستخدام غير المقصود في وقت التشغيل.
constinit: تهيئة ثابتة مضمونة
تضمن constinit تهيئة متغير ثابت أو محلي للخيط في وقت الترجمة، ما يلغي مشكلة ترتيب التهيئة الثابتة.
constinit int globalCount = 10; // initialized at compile time
int main() {
return globalCount;
}constinit ليست const
بخلاف constexpr، يمكن الاستمرار في تعديل متغير constinit بعد تهيئته في وقت الترجمة — فهي تقيّد طريقة تهيئته فقط.
constinit int counter = 0;
int main() {
counter = 5; // OK: constinit allows mutation
return counter;
}حل مشكلة ترتيب التهيئة
بالنسبة إلى المتغيرات الثابتة غير المحلية عبر وحدات الترجمة، تفرض constinit التهيئة الثابتة (في وقت الترجمة)، لذلك تكون القيمة جاهزة قبل بدء أي تهيئة ديناميكية.
مقارنة الكلمات المفتاحية الثلاث
constexpr: قد تكون في وقت الترجمة، وهي ثابتة. consteval: يجب أن تكون في وقت الترجمة (للدوال). constinit: تفرض التهيئة في وقت الترجمة، مع بقاء القيمة قابلة للتعديل.
دعم المصرّفات
هذه ميزات في C++20. ترجم باستخدام -std=c++20 (أو إصدار أحدث) في GCC/Clang، أو /std:c++20 في MSVC.
اختيار الأداة المناسبة
استخدم consteval لفرض الحساب في وقت الترجمة، وconstinit لجعل التهيئة الثابتة حتمية — فهما معًا يجعلان C++ في وقت الترجمة أكثر أمانًا.
تحقق سريع
اختبر مدى فهمك لـ consteval وconstinit.
مراجعة
تعلّمت الكلمتين المفتاحيتين في C++20: consteval (دوال يجب أن تعمل في وقت الترجمة) وconstinit (تهيئة مضمونة في وقت الترجمة للمتغيرات الثابتة، مع بقائها قابلة للتعديل). وبالاقتران مع constexpr، تمنحك هذه الكلمات تحكمًا دقيقًا في التقييم في وقت الترجمة.
الأسئلة الشائعة
هل درس «consteval وconstinit» مجاني؟
نعم — نص درس «consteval وconstinit» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «consteval وconstinit»؟
تعرّف على الكلمات المفتاحية الحديثة لوقت الترجمة تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «consteval وconstinit»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- متغيرات ومعاملات const
- دوال أعضاء const
- constexpr ووقت الترجمة
- consteval وconstinit