"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يفتقر `std::اختياري` إلى تخصصات النوع المرجعي؟

لماذا يفتقر `std::اختياري` إلى تخصصات النوع المرجعي؟

تم النشر بتاريخ 2024-11-08
تصفح:782

Why Does `std::optional` Lack Reference Type Specializations?

سؤال: استكشاف غياب تخصصات النوع المرجعي في std::Optional

في المعيار C، يوفر std::Optional حاوية لـ تحمل قيمة أو تشير إلى غيابها. ومع ذلك، على عكس نظيرتها في Boost، فإن std::اختياري يفتقر إلى تخصصات لأنواع المراجع، مما يترك المستخدمين مع سؤال: لماذا؟ تتعمق هذه المقالة في الأسباب الكامنة وراء قرار التصميم هذا وتستكشف الخيارات البديلة المتاحة في المكتبة القياسية للتعامل مع المراجع إلى القيم الاختيارية.

الإجابة: معالجة المخاوف والتوقعات المستقبلية

خلال الاقتراح الأولي (n3406) للقيم الاختيارية، أثيرت مخاوف من قبل أعضاء اللجنة فيما يتعلق بالمراجع الاختيارية. بعد ذلك، في رقم 3527، اقترح المؤلفون فصل المراجع الاختيارية في اقتراح مساعد لتعزيز فرص اعتماد القيم الاختيارية.

بينما لم يتم تضمين المراجع الاختيارية في C 14 بسبب عوامل أخرى، لم يتم رفضها من قبل اللجنة. وهذا يترك المجال مفتوحًا لإمكانية دمج المراجع الاختيارية في معيار C مستقبلي في حالة تقديم اقتراح.

بدائل للقيم الاختيارية المرجعية

على الرغم من عدم وجود std:: التخصص اختياري لأنواع المراجع، إلا أن المكتبة القياسية توفر بديلاً للمراجع الاختيارية القيم:

  • std::reference_wrapper<:>>: يتيح لك هذا إنشاء مرجع لقيمة اختيارية، مما يضمن إجراء التغييرات على القيمة الاختيارية سوف تنعكس القيمة في المرجع. ومع ذلك، من المهم ملاحظة أن القيمة الاختيارية تظل غير قابلة للتغيير إذا كان المرجع مرجعًا ثابتًا (أي تمت تهيئته باستخدام std::cref).
في الختام، عدم وجود تخصصات نوع المرجع في std::اختياري نشأ عن المخاوف أثناء عملية الاقتراح. ومع ذلك، تظل اللجنة منفتحة للنظر في المراجع الاختيارية في المستقبل. بالإضافة إلى ذلك، توفر المكتبة القياسية std::reference_wrapper<:optional>> كبديل للإشارة إلى القيم الاختيارية في هذه الأثناء.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3