चलो निम्नलिखित कोड पर विचार करें:
int main() {
int i = 2;
int b = ++i++;
return 3;
}
यह एक त्रुटि के साथ निम्नलिखित का संकलन करता है:
<source>: In function 'int main()':
<source>:3:16: error: lvalue required as increment operand
3 | int b = ++i++;
| ^~
यह मुझे उचित लगता है। पोस्टफ़िक्स वेतन वृद्धि उपसर्ग वेतन वृद्धि की तुलना में अधिक प्राथमिकता है, तो कोड के रूप में पार्स किया गया है int b = ++(i++);
और i
एक rvalue है। इसलिए त्रुटि।
आइए अब इस संस्करण पर विचार करें कि डिफ़ॉल्ट प्राथमिकताएँ ओवरराइड करने के लिए कोष्ठक के साथ:
int main() {
int i = 2;
int b = (++i)++;
return 3;
}
यह कोड संकलित करता है और लौटता है। 3. अपने दम पर, यह मुझे उचित लगता है लेकिन यह पहले कोड के साथ विरोधाभास लगता है।
सवाल: जब (++i)
एक क्यों नहीं है?lvalue
i
धन्यवाद!
अद्यतन: ऊपर दिखाया गया त्रुटि संदेश gcc (x86-64 9.2) से था। यहाँ सटीक प्रतिपादन है: gcc के साथ त्रुटि
क्लेंग x86-64 9.0.0 में एक बहुत अलग संदेश है: क्लैंग के साथ त्रुटि
<source>:3:13: error: expression is not assignable
int b = ++i++;
^ ~~~
जीसीसी के साथ, आपको यह धारणा मिलती है कि समस्या पोस्टफ़िक्स ऑपरेटर के साथ है और आप तब भटक सकते हैं, ++i
जबकि ठीक i
नहीं है, इसलिए यह सवाल नहीं है। क्लैंग के साथ यह स्पष्ट है कि समस्या उपसर्ग ऑपरेटर के साथ है।