2011-09-13 10 views
7
cout<<(x++)++; //fails 
cout<<++(++x); //passes 

पोस्ट वृद्धि क्यों विफल हो जाती है? मैं इसे देखता हूं लेकिन तकनीकी कारणों के बारे में सुनिश्चित नहीं हूं।पोस्ट वृद्धि ऑपरेटर ++

+2

अस्थायी रूप से बढ़ने के बाद? – Benoit

+0

'x' का प्रकार क्या है? यह बहुत मायने रखता है। यदि यह अंतर्निहित है, तो 'ऑपरेटर ++' फ़ंक्शन कॉल नहीं है। – MSalters

+0

इसका एक अंतर्निहित, int x = 5; – user835194

उत्तर

13

x++ एक रैवल्यू देता है ताकि आप इसे फिर से ++ निष्पादित न कर सकें। दूसरी ओर, ++x एक लाभा देता है ताकि आप ++ पर प्रदर्शन कर सकें।

+1

यह भी देखें [यह प्रश्न] (http://stackoverflow.com/questions/371503/why-is-i-cononsidered-an-l-value-but-i-is-not) – Benoit

4

इस प्रकार वृद्धिशील ऑपरेटर सी/सी ++ में काम करते हैं।

आप चर (पोस्टफ़िक्स वेतन वृद्धि) के बाद ++ डालते हैं, तो पूरे अभिव्यक्ति incrementing से पहले चर के मूल्य के मूल्यांकन करता है।

यदि आप चर (prefix वृद्धि) से पहले ++ डालते हैं, तो अभिव्यक्ति वृद्धि कार्य के बाद मान का मूल्यांकन करती है।

जबकि उपसर्ग ऑपरेशन उत्तीर्ण चर के संदर्भ को देता है, पोस्टफिक्स संस्करण एक अस्थायी मान देता है, जिसे बढ़ाया नहीं जाना चाहिए।

1

बिल्कुल। आप एक रावल्यू पर एक ++ प्रदर्शन नहीं कर सकते हैं। here कैसे दिया जाता है के बारे में एक अच्छा स्पष्टीकरण दिया गया है।

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