यह C और C ++ में अंतराल और अंतराल की चिंता करता है।
C प्रोग्रामिंग लैंग्वेज में, प्री-इन्क्रीमेंट और पोस्ट-इन्क्रीमेंट ऑपरेटर्स, दोनों रिवल्यूशन लौटाते हैं, लैवल नहीं। इसका अर्थ है कि वे =
असाइनमेंट ऑपरेटर के बाईं ओर नहीं हो सकते हैं । ये दोनों कथन C में संकलक त्रुटि देंगे:
int a = 5;
a++ = 2; /* error: lvalue required as left operand of assignment */
++a = 2; /* error: lvalue required as left operand of assignment */
C ++ में, हालांकि प्री-इन्क्रीमेंट ऑपरेटर एक लैवल्यू लौटाता है , जबकि पोस्ट-इन्क्रीमेंट ऑपरेटर एक रिवॉल्यू लौटाता है। इसका मतलब है कि पूर्व-वेतन वृद्धि ऑपरेटर के साथ एक अभिव्यक्ति =
असाइनमेंट ऑपरेटर के बाईं ओर रखी जा सकती है !
int a = 5;
a++ = 2; // error: lvalue required as left operand of assignment
++a = 2; // No error: a gets assigned to 2!
अब ऐसा क्यों है? पोस्ट-इन्क्रीमेंट वेरिएबल को बढ़ाता है, और यह वैरिएबल वैसा ही लौटाता है जैसा कि इन्क्रीमेंट से पहले था । यह वास्तव में सिर्फ एक प्रतिद्वंद्विता है। चर का पूर्व मान एक अस्थायी के रूप में एक रजिस्टर में कॉपी किया जाता है, और फिर एक वृद्धि होती है। लेकिन एक का पूर्व मान अभिव्यक्ति द्वारा लौटाया जाता है, यह एक प्रतिद्वंद्विता है। यह अब चर की वर्तमान सामग्री का प्रतिनिधित्व नहीं करता है।
प्री-इन्क्रीमेंट पहले वैरिएबल को बढ़ाता है, और उसके बाद वैरिएबल को वैसा ही लौटाता है जैसा कि इन्क्रीमेंट के बाद होता है। इस मामले में, हमें चर के पुराने मूल्य को एक अस्थायी रजिस्टर में संग्रहीत करने की आवश्यकता नहीं है। हम परिवर्धित होने के बाद परिवर्तनशील के नए मान को पुनः प्राप्त करते हैं। तो पूर्व-वेतन वृद्धि एक प्रतिफल देता है, यह चर को खुद ही लौटा देता है। इस लैवल्यू को हम किसी और चीज़ के लिए असाइन कर सकते हैं, यह निम्नलिखित स्टेटमेंट की तरह है। यह लवलीन का एक अनुमानित रूपांतरण है।
int x = a;
int x = ++a;
चूंकि पूर्व वेतन वृद्धि एक प्रतिफल देती है, इसलिए हम इसे कुछ भी प्रदान कर सकते हैं। निम्नलिखित दो कथन समान हैं। दूसरे असाइनमेंट में, पहले एक वेतन वृद्धि की जाती है, फिर उसका नया मान 2 के साथ ओवरराइट किया जाता है।
int a;
a = 2;
++a = 2; // Valid in C++.