2010-10-14 14 views
14

मैं स्पष्टीकरण मैंने पाया ने कहा कि i = ++i is not undefined जहाँ तक C++ 0x का संबंध है, लेकिन मैं न्याय के लिए कि क्या i += ++i के व्यवहार अच्छी तरह से परिभाषित या नहीं में असमर्थ हूँ के साथ बहुत आश्वस्त हूँ। कोई लेने वाला?क्या मैं + +++ सी ++ 0x में अपरिभाषित व्यवहार है?

+0

जी ++ कहता है * हाँ, यह यूबी है। * – kennytm

+1

@ केनीटीएम: मेरे पास संस्करण 4.5.0 है और यह मुझे चेतावनी देता है कि मैं भी = i+ मैं अपरिभाषित हूं। आप कौन सा संस्करण उपयोग कर रहे हैं? क्या आपने चेतावनी के बिना i =++ संकलित करने में सफल रहा है? –

+0

दोनों i = ++ मैं और मैं + = ++ मैं यूबी –

उत्तर

9

तर्क है कि i = ++i बनाता है अच्छी तरह से परिभाषित समान रूप से साबित होता है कि i += ++i भी अच्छी तरह से परिभाषित किया जाना चाहिए इस्तेमाल किया जा सकता।

i += ++ii += (i += 1) के बराबर है और नए अनुक्रमण नियमों की आवश्यकता है कि काम i += 1 उप अभिव्यक्ति के मूल्य-गणना से पहले जगह लेता है।
इसका मतलब है कि अभिव्यक्ति i += ++i का परिणाम i = 2 * i + 1 के लिए के रूप में ही किया जाना चाहिए।

संपादित करें: मुझे अपना जवाब संशोधित करना है, क्योंकि व्यवहार सभी के बाद अपरिभाषित है। क्योंकि उप भाव i (बाएं हाथ की ओर तर्क) और ++i का मूल्य-संगणना एक दूसरे के संबंध में unsequenced कर रहे हैं और उनमें से एक वस्तु i की एक अद्यतन शामिल
i += ++i के व्यवहार, अनिर्धारित रहता है।

इसका कारण यह है वहाँ बाएं हाथ की ओर पर i एक lvalue करने वाली rvalue रूपांतरण है, जो i += ++i मामले में होता है से गुजरना नहीं करता है, अभिव्यक्ति i = ++i के लिए एक समस्या नहीं है।


अतिरिक्त नोट पर: किसी भी गंभीर परियोजना में इस तरह के कोड लिखने है। यह अनुक्रम नियमों को जानने के लिए बहुत अधिक निर्भर करता है और ऐसे कई लोग होंगे जो अनुक्रमिक नियमों को सही ढंग से समझ नहीं पाते हैं, नियमों में बदलाव से अनजान हैं जो डीआर 637 का नतीजा है या कुछ महत्वपूर्ण याद करके फिसल गए हैं प्रश्न में अभिव्यक्ति के पहलुओं (जैसा कि इस उत्तर के पहले संशोधन को लिखते समय मेरे साथ हुआ)।

+0

i + =++ मैं i = i +++ के बराबर होगा; जैसे कि मेरा मूल्यांकन केवल एक बार किया जाता है। लेकिन, क्या यह परिभाषित किया गया है कि मैं या ++ का पहला मूल्यांकन किस प्रकार किया जाता है? –

+0

@ सौरभ: आप सही हैं। 'I = ++ i' और' i + = ++ i' के बीच का अंतर बाएं हाथ 'i' का मान-गणना है, जो' ++ i' के साथ अपूर्ण है। यह परिणाम अपरिभाषित बनाता है। मैं तदनुसार अपना जवाब अपडेट करूंगा। –

+0

धन्यवाद।मेरे मन में वही था, लेकिन पूरी तरह से यकीन नहीं था। –

संबंधित मुद्दे