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

## **هل يؤدي ربط مرجع ثابت إلى كائن فرعي مؤقت إلى إطالة عمره؟ قصة دول مجلس التعاون الخليجي وكلانج**

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

##  **Does Binding a Constant Reference to a Sub-Object of a Temporary Extend Its Lifetime? A Tale of GCC and Clang**

ربط مرجع ثابت بكائن فرعي مؤقت

السلوك القياسي

السلوك عند ربط مرجع ثابت إلى كائن فرعي يتم تعريف المؤقت بواسطة معيار C ويختلف اعتمادًا على بائع المترجم.

GCC و Clang الاختلافات

  • دول مجلس التعاون الخليجي (الإصدار 5.2.0): يدمر مثيل P2d المؤقت قبل إدخال printf بشكل رئيسي، مع الحفاظ على القيمة عن طريق إنشاء مزدوج مؤقت آخر.
  • Clang (الإصدار X): يوسع عمر مثيل P2d المؤقت إلى عمر المرجع x، ويستدعي المدمر بعد printf في main.

التفسيرات

وفقًا لـ CWG 1651، يجب التعامل مع نتيجة وصول العضو أو التعبير المنخفض المطبق على قيمة pr على أنها قيمة x. هذا يعني أن ربط مرجع بمثل هذا الكائن الفرعي المؤقت لا ينبغي أن يزيد من عمر المؤقت.

ومع ذلك، في المثال المقدم، يعامل كلا المترجمين center().x كقيمة pr. لا يقوم مجلس التعاون الخليجي بتمديد العمر عند استخدام الكائنات الفرعية العددية لأنها غير مشمولة بـ [dcl.init.ref]/(5.2.1.1). وبالتالي، يمكن تدمير الكائن المؤقت مبكرًا.

في المقابل، نفذت Clang الحل المعلق لـ DR 1651، والذي ينص على أنه إذا كان E1 تعبيرًا مؤقتًا ولم يعين E2 حقل بت، فإن E1 .E2 تعبير مؤقت. وبما أن center() هو تعبير مؤقت وفقًا لهذا التعريف، فإن الصيغة المعدلة في [class.temporary] /5 تنطبق. وينص صراحة على أن الكائن المؤقت المقابل يستمر طوال عمر المرجع.

لذلك، يعمل Clang على تمديد عمر مثيل P2d المؤقت في هذه الحالة، في حين أن دول مجلس التعاون الخليجي لا تفعل ذلك.

الاستنتاج

من المتوقع أن يتغير السلوك الحالي في كل من دول مجلس التعاون الخليجي وكلانج بمجرد اعتماد المراجعات المقترحة لمعيار C.

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

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

Copyright© 2022 湘ICP备2022001581号-3