ترتيب تقييم بيانات التعيين في لغة C
يمكن الحصول على مخرجات محيرة عند تعيين قيمة لخريطة:
map mp;
printf("%d ", mp.size());
mp[10] = mp.size();
printf("%d\n", mp[10]);
يطبع هذا الرمز:
0 1
قد تبدو هذه النتيجة غير بديهية، كما قد يتوقع المرء حجم الخريطة هو 1 بعد التعيين. ومع ذلك، فإن ترتيب تقييم بيان المهمة يلعب دورًا حاسمًا هنا.
يقوم الجانب الأيسر من المهمة mp[10] بإرجاع إشارة إلى القيمة الأساسية لعنصر الخريطة. في نفس الوقت، يقوم هذا الإجراء بإنشاء قيمة جديدة للعنصر mp[10]. فقط بعد هذه العملية يتم تقييم الجانب الأيمن، باستخدام الحجم المحسوب حديثًا للخريطة.
لم يتم ذكر هذا السلوك صراحةً في معيار C ولكنه يقع ضمن سلوك غير محدد. يهدف اقتراح حديث، N4228، إلى تحسين ترتيب قواعد التقييم لتحديد مثل هذه الحالات.
ينص القسم ذو الصلة من مشروع معيار C 11 (1.9) على أن تقييمات التعبيرات الفرعية للتعبيرات الفردية غير متسلسلة بشكل عام. ومع ذلك، يتم تسلسل استدعاءات الوظائف (مثل عامل التشغيل [] وsize()) قبل تنفيذ نص الوظيفة المطلوبة.
لذلك، يتم تسلسل المعامل الأيمن لتعبير المهمة بعد المعامل الأيسر، مما يؤدي إلى السلوك الملاحظ. وهذا يعني أن ترتيب التقييم هو كما يلي:
من المتوقع أن يحدد تحديث لمعيار C هذا السلوك، مما يوضح أن المعامل الأيمن لتعبير المهمة متسلسل قبل المعامل الأيسر.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3