السلوك عند ربط مرجع ثابت إلى كائن فرعي يتم تعريف المؤقت بواسطة معيار C ويختلف اعتمادًا على بائع المترجم.
وفقًا لـ 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