قدم C 11 محدد constexpr، مما يتيح استخدام الوظائف في التعبيرات الثابتة. على الرغم من فرض متطلبات صارمة على سلوك الوظيفة، إلا أنها تقدم فائدة بالغة الأهمية.
فكر في سيناريو حيث تقوم وظيفة المكتبة في البداية بإرجاع ثابت، كما هو موضح في Awesome_lib.hpp:
inline int f() { return 4; }
في غياب constexpr، يمكن أن يستخدم كود العميل هذه الوظيفة للأغراض التي تتطلب ثوابت وقت الترجمة، مثل وسيطات القالب أو أبعاد المصفوفة.
#include#include std::array ; // needs CT template arg int my_c_array[f()]; // needs CT array dimension
ومع ذلك، إذا تغير تطبيق f() لاسترداد قيمته من ملف التكوين، فسوف ينقطع رمز العميل هذا. سيؤدي هذا التغيير إلى تغيير استخدام الواجهة بشكل فعال دون معرفة مبرمج العميل.
من خلال وضع علامة على الوظيفة على أنها constexpr، يقر المبرمج بأن كود العميل يمكن أن يتوقع بشكل معقول طبيعته الثابتة. وهذا يضمن عدم تعرض استخدام وظيفة المكتبة للخطر بسبب تغييرات التنفيذ. يفرض المترجم هذا التوقع، مما يضمن أن كود العميل لا يعتمد على وظائف غير ثابتة.
&&&]يضمن محدد const أن وظائف الأعضاء الأخرى داخل وظيفة العضو الثابت ثابتة أيضًا، في حين أن constexpr لا يفرض نتائج ثابتة في وقت الترجمة لجميع استخداماته. تسمح هذه المرونة بالوظائف المختلطة التي يمكنها إرجاع نتائج وقت الترجمة عندما يكون ذلك ممكنًا ولكن تعود إلى حسابات وقت التشغيل ضمن سياقات غير مفاهيمية.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3