कोई भी जावा में काम करते हैं, क्योंकि दोनों पोस्टफ़िक्स और उपसर्ग वेतन वृद्धि के संचालन मूल्यों नहीं चर लौट हम एक उदाहरण के लिए Postfix Increment Operator ++ पर JLS अनुभाग पर जाकर देख सकते हैं और यह कहते हैं:
The result of the postfix increment expression is not a variable, but a value.
Prefix Increment Operator ++ के लिए जेएलएस अनुभाग एक ही बात कहता है।
2++ ;
++3 ;
जो निम्न त्रुटि देता है::
required: variable
found: value
कौन सा एक ही गलती हम आपके उदाहरण के लिए प्राप्त है
यह एक शाब्दिक मूल्य (see it live) बढ़ाने के लिए कोशिश की तरह होगा ।
सी ++ उपसर्ग वृद्धि में एक अंतराल लौटाता है लेकिन पोस्टफिक्स वृद्धि एक प्रावधान देता है और सी ++ में दोनों उपसर्ग और पोस्टफिक्स वृद्धि में एक अंतराल की आवश्यकता होती है। तो अपने पहले और तीसरे सी ++ उदाहरण:
++a++;
++(a++)
में विफल रहता है, क्योंकि आप एक prvalue को उपसर्ग वेतन वृद्धि लागू करने का प्रयास कर रहे हैं। जबकि दूसरा सी ++ उदाहरण:
(++a)++;
ठीक है क्योंकि उपसर्ग वृद्धि एक अंतराल देता है।
संदर्भ के लिए खंड में draft C++ standard5.2
पोस्टफिक्स भाव का कहना है:
The value of a postfix ++ expression is the value of its operand [...] The operand shall be a modifiable lvalue
और:
The result is a prvalue
और अनुभाग 5.3
एकल भाव का कहना है:
The operand of prefix ++ is modified [...] The operand shall be a modifiable lvalue
और:
The result is the updated operand; it is an lvalue
स्रोत
2014-11-19 16:30:30
क्या सी ++ संकलक? और आपको लगता है कि 'ए ++' एक 'शून्य' कथन है? –
@FredLarson मैंने ideone.com पर 'C++ 11' कंपाइलर का उपयोग किया, लेकिन मुझे लगता है कि यह किसी भी C++ कंपाइलर पर स्वीकार्य है। मुझे लगता है कि यह एक 'शून्य' कथन है क्योंकि यह बराबर (कार्यात्मक रूप से) है: 'ए = ए + 1; 'जो वास्तविक मूल्य नहीं देता है। – Ryan
'" ...एक पार्सर केवल एक-टोकन लुकहेड का उपयोग करके और पार्स के दौरान कोई अर्थपूर्ण विश्लेषण नहीं बता पाएगा, जब ++ लुकहेड टोकन है, चाहे (पी) को प्राथमिक अभिव्यक्ति माना जाना चाहिए या बाद में विचार के लिए अकेले छोड़ दिया जाना चाहिए CastExpression। "' – azurefrog