I was looking for an logical explanation for why it is not allowed
यह वास्तव में एक अच्छा सवाल है। कारण यह है कि सी ++ तर्कों के मूल्यांकन के आदेश को अनिवार्य नहीं करता है।
int f(int a, int b = ++a);
... followed by ...
int a = 1;
f(a);
सी ++, याद तर्क के मूल्यांकन के आदेश जनादेश नहीं करता है:
तो चलो एक थोड़ा और अधिक जटिल परिदृश्य की कल्पना करते हैं?
तो बी का मूल्य क्या होना चाहिए?
f(a)
मूल्यांकन कर सकते हैं करने के लिए या तो:
f(1, 2)
, या f(2, 2)
, तर्क के मूल्यांकन के आदेश पर निर्भर करता है।
इस प्रकार व्यवहार अपरिभाषित (और यहां तक कि अनिश्चित) भी होगा।
आगे, विचार करें कि क्या हो सकता है जब ए और बी जटिल वस्तुएं थीं जिनके रचनाकारों और प्रतिलिपि ऑपरेटरों के दुष्प्रभाव थे।
उन दुष्प्रभावों का क्रम अपरिभाषित होगा।
स्रोत
2016-05-19 23:17:04
@ बाममितएगेन सुंदर निर्णायक नहीं है? –
@ रिचर्डहोजेस हाँ, संकलक यहां पैसे पर सही था। –
मैं एक तार्किक स्पष्टीकरण की तलाश में था कि इसकी अनुमति क्यों नहीं है। – user1918858