هل "تحسين قيمة الإرجاع" يسبب سلوكًا غير محدد؟

StackOverflow https://stackoverflow.com/questions/2323940

  •  22-09-2019
  •  | 
  •  

سؤال

قراءة هذه وأشار مقال ويكيبيديا عن طريق أحد الردود على السؤال التالي:

C ++ نسخ مُنشئ ، مؤقتة ونسخ الدلالات

جئت عبر هذا الخط

اعتمادًا على المترجم ، وإعدادات المترجم ، قد يعرض البرنامج الناتج أيًا من المخرجات التالية:

ألا يتأهل هذا للسلوك غير المحدد؟ أعرف أن المقال يقول Depending on the compiler and settings لكني أريد فقط مسح هذا.

هل كانت مفيدة؟

المحلول

لا ، إنه ليس سلوكًا غير محدد. السلوك غير المحدد له تعريف محدد في المعيار (في الغالب: "السلوك ، مثل قد ينشأ عند استخدام بنية برنامج خاطئ أو بيانات خاطئة ، لا يفرض هذا المعيار الدولي أي متطلبات.") في هذه الحالة ، يكون السلوك غير محدد ، ولكن ليس غير محدد.

الفرق هو أن أي تنفيذ لأي شيء مع سلوك غير محدد يجعل كل سلوك برنامجك غير محدد (أي يمكن أن يحدث أي شيء). من خلال هذا السلوك غير المحدد بالذات ، يمكن أن يحدث واحد فقط من شيئين: إما تنفيذ مُنشئ النسخ ، أو لا يتم تنفيذه.

نصائح أخرى

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

يرى: شياطين الأنف

سلوك غير محدد يختلف تمامًا عن تنفيذ السلوك المحدد, ، وهو ما ينطوي عليه هنا.

يعتمد على ما تقصده من خلال غير محدد. أعتقد ما قاله الآخرون هنا - من خلال تعريف استخدام وثيقة المعايير. لكنني أعلم أيضًا أنه عندما يقول شخص ما "إما هذا أو ذاك ، لا أخبرك عن" أفكر في الأمر كسلوك غير محدد.

إنها ليست مشكلة كبيرة ، لأنها يجب ألا تسبب خطأً. عندما تحدد طرقًا معينة ، من المتوقع أن تحددها بعد اتفاقيات معينة - فهذا نوع من العقد الضمني بينك وبين المترجم والأشخاص الذين سيستخدمون الكود الخاص بك ويحافظون عليه.

في هذه الحالة ، سواء حصلت على نسخ للبناء وما إلى ذلك أو السلوك الأمثل ، من المتوقع أن يكون التأثير هو نفسه - يتلقى المتصل القيمة المطلوبة. إذا كان منشئ النسخ الخاص بك يطبع "Hello World!" أو لديه آثار جانبية أخرى غير لائقة ، فهي لا تنفذ السلوك المتوقع لمؤسس ، وبالتالي فإن الخطأ هو لك كسر العقد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top