2012-08-30 6 views
6

मैं एक व्यक्ति का दावा है कि इस लाइन सी ++ मानक में शामिल नहीं है था:सरणी है [i] = i ++ सी ++ मानक द्वारा कवर किया गया है?

int i(1); 
array_of_int[i] = i++; 

व्यक्ति ने कहा कि यह 1 प्रदान करेंगे, लेकिन हम यह नहीं जान सकते कि क्या यह या array_of_int[2] हालांकि दृश्य स्टूडियो और array_of_int[1] में होगा सबसे कंपाइलर्स का array_of_int[1] होगा।

क्या वह सही है?

+0

जैसा कि मैं इसे समझता हूं, यह व्यवहार संकलक द्वारा निर्धारित किया जाता है और सी ++ मानक – CatShoes

+4

में स्पष्ट रूप से संबोधित नहीं किया गया संभावित डुप्लिकेट: http://stackoverflow.com/questions/949433/could-anyone-explain-these-undefined-behaviors -iiiii-etc - यह एक जवाब में शामिल है। – Mat

+0

अगर यह एक डुप्ली है तो कृपया मेरे प्रश्न को बंद या हटा दें, मैंने यह खोजने की कोशिश की कि यह पूछा गया था लेकिन सही खोजशब्दों के साथ मेरी खोज तैयार नहीं की गई। – BlueTrin

उत्तर

6

यह अनिर्धारित व्यवहार है। सचमुच कोई व्यवहार कानूनी है।

पिछले और अगले अनुक्रम बिंदु एक वस्तु है अपने संग्रहीत मूल्य एक अभिव्यक्ति के मूल्यांकन से अधिकतम एक बार संशोधित करेगा बीच

:

बीतने कि कोड की है कि रेखा की मनाही है। इसके अलावा, पहले मूल्य केवल मूल्य निर्धारित करने के लिए पढ़ा जाएगा

वहाँ a[i] और i++ और a[i] में i को पढ़ने के बीच कोई अनुक्रम बिंदु है निर्धारण मूल्य में संग्रहित है के उद्देश्य के लिए नहीं है संग्रहीत करने के लिए ii++ द्वारा।

+0

स्पष्टीकरण के लिए धन्यवाद, मैंने अनुक्रम बिंदु के विकी पेज के लिए एक लिंक जोड़ा – BlueTrin

+1

अनुक्रम बिंदु C++ से हटा दिए गए हैं और अनुक्रमण के साथ प्रतिस्थापित किया गया है बयान/उप-अभिव्यक्तियों के बीच संबंध। [यहां देखें] (http://stackoverflow.com/a/10655884/365496)। यह अनिर्धारित व्यवहार के कुछ उदाहरणों को अच्छी तरह परिभाषित व्यवहार में बदलता है, लेकिन इस विशेष मामले के मामले में नहीं। – bames53

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