السؤال الأصلي:
في لغة C، هل من الممكن حساب قيمة constexpr (ثابت وقت الترجمة) من دالة constexpr وتخزينها كعضو ثابت في class?المحاولات الأولى واستجابة المترجمين:
فشلت المحاولة الأولى لتعريف دالة constexpr ثابتة foo داخل الفصل وتهيئة شريط أعضاء constexpr ثابت باستخدام foo مع وجود أخطاء في كل من g -4.5.3 وg -4.6.3.شرح:
وفقًا لمعيار C، يمكن تهيئة عضو بيانات ثابت ثابت في تعريف الفئة باستخدام قوس أو يساوي -initializer، حيث يجب أن تكون كل جملة مُهيئ تعبيرًا ثابتًا. الكود المقدم ينتهك هذه القاعدة، حيث أن تهيئة الشريط تعتمد على تعبير const foo(sizeof(int)) داخل نص الفصل، مما يجعله ليس تعبيرًا ثابتًا.مزيد من التحليل:
لا تزال المحاولات الإضافية، بما في ذلك نقل تعريف الدالة constexpr خارج نص الفئة، تؤدي إلى حدوث أخطاء في g -4.6.3، مع تسليط الضوء على المترجم الخاص القيود.
الخلاصة:
وفقًا لمعيار C، لا يُسمح بتهيئة عضو بيانات constexpr الثابت باستخدام مُهيئ يشتمل على استدعاء دالة constexpr خارج تعريف a وظيفة constexpr أو منشئ constexpr. ويرجع ذلك إلى ضرورة توفر متغيرات constexpr كثوابت وقت الترجمة داخل الهيئات الوظيفية للأعضاء.تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3