2012-03-01 23 views
14

मैं निम्नलिखित कोड दोनों सी ++ और सी #सी # में ++ मैं ऑपरेटर अंतर और सी ++

int i=0; 
++i = 11; 

इस सी # संकलक के बाद एक त्रुटि लाता

The left-hand side of an assignment must be a variable, property or indexer 

लेकिन सी ++ संकलक उत्पन्न इस कोड में लिखा बिना किसी त्रुटि के और मुझे 11 का परिणाम i के मान के लिए मिला। इस अंतर का कारण क्या है?

+4

ऑफटॉपिक: आप इसे क्यों बढ़ाना चाहते हैं और फिर इसे सीधे 11 पर सेट करना चाहते हैं? वृद्धि कोई समझ नहीं आता है। – RvdK

+0

इस कोड के लिए क्या उपयोग है? –

+0

'कुछ आरे [++ i] = 11' अधिक समझ में आएगा। –

उत्तर

41

अंतर यह है कि पूर्व-वृद्धि ऑपरेटर सी ++ में है, और सी # में नहीं है।
सी ++ ++i में वृद्धिशील चर का संदर्भ देता है। सी # ++i में परिवर्तनीय i के वृद्धि मूल्य को वापस करता है।
तो इस मामले में ++iसी ++ और रैवल्यू में सी # में है।

C++ से उपसर्ग वेतन वृद्धि ऑपरेटर

संकार्य के प्रकार के अंकगणितीय प्रकार या एक पूरी तरह से परिभाषित ऑब्जेक्ट प्रकार के लिए सूचक होगा के बारे में विनिर्देश। मान ऑपरेंड का नया मान है; यह lvalue है।

पीएस पोस्टफिक्स वृद्धि ऑपरेटर i ++ सी # और सी ++ दोनों में lvalue नहीं है, इसलिए कोड की यह पंक्तियां दोनों भाषाओं में त्रुटि लाएंगी।

int i=0; 
i++ = 11; 
5

सी # और सी ++ 2 पूरी तरह से अलग-अलग भाषाओं और अवधारणाएं हैं। वे केवल नाम साझा करते हैं क्योंकि उनका वाक्यविन्यास सी पर आधारित होता है, इसलिए वास्तव में "यह सी # पर क्यों काम करता है लेकिन सी ++ पर नहीं" एक प्रश्न के रूप में कोई समझ नहीं आता है। यह कहने जैसा ही है कि अंग्रेजी में एक टेबल को "टेबल" क्यों कहा जाता है, लेकिन स्पेनिश में "मेसा" कहा जाता है। क्योंकि यह तय करने का फैसला किया गया था।

सी # बस इस तरह के वाक्यविन्यास की अनुमति नहीं देता है।

C++ में आप की अनुमति हो रहे हैं: पहला ++i गणना की जाती है, जो i = 1 बना देता है, और उसके बाद 11 जो i = 11 बनाता i को सौंपा गया है,।

+3

यह थोड़ा कठोर है। प्रश्न * सी भाषा के लिए आम है और सी ++ में काम करने वाली कई चीजें भी सी # में काम करती हैं! यह एक पूरी तरह से वैध प्रश्न आईएमओ है, खासकर जब से सी ++ में प्रश्न में कोड एक बयान का प्रतिनिधित्व करता है जो कोई तार्किक अर्थ नहीं बनाता है। – adelphus

+0

हर्ष? कठोर क्यों? मैं बस यह कह रहा हूं कि सी # और सी ++ में सी पर आधारित होने के अलावा कुछ भी सामान्य नहीं है। सवाल सी के लिए आम नहीं है, क्योंकि वह सी के बारे में नहीं पूछ रहा है, और सी में यह वाक्य पूरी तरह से काम करता है, और यह सी # में नहीं है, सिर्फ दिखाता है कि सी # के नाम और सिंटैक्स को छोड़कर सी के साथ कुछ भी नहीं है (जिसे बीटीडब्ल्यू को पर्ल, जावा और इस तरह की कई भाषाओं द्वारा कॉपी किया गया है)। – m0skit0

+2

सी # और सी ++ में समानताएं हैं ... उदाहरण के लिए जावा और हास्केल जैसे अलग नहीं हैं। तो मेरे लिए यह एक वैध सवाल है और यह जानना मेरे लिए दिलचस्प है। –

2

अर्थशास्त्र बहुत अलग हैं। सी ++ में अर्थशास्त्र यह है कि आप I द्वारा पहचाने गए संग्रहण स्थान पर मान 11 असाइन करते हैं। सी # में अर्थ विज्ञान नीचे बयान

1=11 

कि यह मान 1 है जो सी # संकलक की अनुमति नहीं है के लिए मूल्य 11 असाइन करने की कोशिश करने के लिए बराबर है के शब्दों के बराबर हैं। (फोरट्रान compilers वास्तव में इस की अनुमति नहीं है और कहा कि नारकीय डिबगिंग परिदृश्यों बना सकते हैं)

6

ध्यान दें कि ++i = 11 सी ++ 03 में अपरिभाषित आह्वान क्योंकि आप एक बीच के अनुक्रम बिंदु के बिना दो बार i संशोधित कर रहे हैं। यह सी ++ 11 में अच्छी तरह से परिभाषित है, हालांकि: पहले वृद्धि, फिर असाइनमेंट।

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