سؤال

تحتوي معظم لغات البرمجة على جدول الأسبقية والترابط للمشغلين الثنائيين.الترابط مهم في بعض الحالات، على سبيل المثال. (a - b) - c != a - (b - c).

ومع ذلك، بالنسبة للمشغل النقابي مثل && قد يبدو الأمر غير مهم، لكن معظم اللغات تدرج هذا على أنه ترابطي أيسر.

هل هناك أي حالات يوجد فيها فرق بالفعل بين (a && b) && c و a && (b && c)?

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

المحلول

لا أستطيع أن أصدق أن هناك الكثير من الإجابات الخاطئة (المحذوفة) ...ربما يجب أن أجيب على هذا.

أولاً، الأسبقية != الترابط != ترتيب التقييم.

والآن بعد أن انتهينا من ذلك:الارتباط مهم في بعض الحالات.
ل a + b + c, ، يهم متى a, b, ، و c هي أرقام فاصلة عائمة بدلاً من الأعداد الصحيحة، لأن أخطاء التقريب ستتراكم بشكل مختلف اعتمادًا على كيفية تجميع المصطلحات.

بالنسبة للحالة الخاصة && و ||, ، لا يهم طالما أنها ليست مثقلة (وهو أمر ممكن فقط في C++، وليس C)، ولكن اللغة لا تزال تحدد واحدًا فقط من أجل الاتساق - وبالتالي يكون التمثيل "الشجرة" للكود (استنادًا إلى القواعد) فريدًا.وهذا يعمل أيضًا لصالح C++ منذ الآن معنى التحميل الزائد && و || ليست غامضة.

نصائح أخرى

إضافة إلى إجابة @Mehrdads@ (التي قمت بالتصويت عليها):

إذا قمت بإنشاء محلل في أي وقت مضى، ستلاحظ أن المشغلين لديك يجب أن يكون لديهم ارتباط، وإلا

a && b && c

سيكون مجرد خطأ في بناء الجملة.على افتراض أن ما ورد أعلاه لا ينبغي أن يكون خطأ في بناء الجملة، يجب عليك أن تقرر ما إذا كان ينبغي أن يعني:

(a && b) && c

أو

a && (b && c)

لا يمكنك أن تقول فقط:لا أهتم.

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