आपके प्रश्न का एकमात्र उत्तर जो सही है: क्योंकि यह अपरिभाषित है।
ठीक है, पहले तुम सब मुझे जला दो ।।
आप सभी ने उत्तर दिया कि i+=i++
परिणाम के लिए ठीक और तार्किक क्यों है i=0
।
मुझे आपके प्रत्येक उत्तर के लिए प्रत्येक 1 वोट देने का लालच दिया गया था, लेकिन मेरे द्वारा गणना की गई प्रतिष्ठा बहुत अधिक होगी।
मैं तुम लोगों पर इतना पागल क्यों हूँ? इस कारण नहीं कि आपके उत्तर क्या बताते हैं ..
मेरा मतलब है, मैंने पढ़ा हर उत्तर असंभव को समझाने का एक उल्लेखनीय प्रयास किया है, आई तालियाँ!
लेकिन नतीजा क्या है ?? क्या यह सहज परिणाम है - क्या यह स्वीकार्य परिणाम है ??
आप में से प्रत्येक ने "नग्न राजा" को देखा और किसी तरह इसे तर्कसंगत राजा के रूप में स्वीकार किया।
आप सभी गलत हैं!
i+=i++;
परिणाम 0
अपरिभाषित है।
भाषा मूल्यांकन तंत्र में एक बग यदि आप करेंगे .. या इससे भी बदतर! डिजाइन में एक बग।
एक सबूत चाहते हैं? बेशक आप चाहते हैं!
int t=0; int i=0; t+=i++; //t=0; i=1
अब यह ... सहज परिणाम है! क्योंकि हमने पहले इसका मूल्यांकन t
एक मूल्य के साथ सौंपा था और मूल्यांकन और असाइनमेंट के बाद ही हमारे पास पोस्ट ऑपरेशन हो रहा था - तर्कसंगत नहीं है?
क्या यह तर्कसंगत है कि: i=i++
और i=i
उसी परिणाम के लिए उपज i
?
जबकि t=i++
और के t=i
लिए अलग परिणाम है i
।
पोस्ट ऑपरेशन कुछ ऐसा है जो बयान मूल्यांकन के बाद होना चाहिए।
इसलिए:
int i=0;
i+=i++;
वैसा ही होना चाहिए यदि हमने लिखा है:
int i=0;
i = i + i ++;
और इसलिए:
int i=0;
i= i + i;
i ++;
और इसलिए:
int i=0;
i = i + i;
i = i + 1;
1
यदि हम तर्कसंगत सोच के साथ जाते हैं तो कोई भी परिणाम जो भाषा के डिज़ाइन में एक बग या बग को इंगित नहीं करता है - हालांकि MSDN और कई अन्य स्रोत हमें बताते हैं "हे - यह अपरिभाषित है!"
अब, इससे पहले कि मैं जारी रखूं, मेरे द्वारा दिए गए उदाहरणों के इस सेट का भी किसी ने समर्थन या स्वीकार नहीं किया है। हालांकि यह सहज और तर्कसंगत तरीका है।
कोडर को इस बात का कोई ज्ञान नहीं होना चाहिए कि असेंबली को कैसे लिखा या अनुवादित किया जा रहा है!
यदि यह इस तरीके से लिखा गया है जो भाषा की परिभाषा का सम्मान नहीं करेगा - यह एक बग है!
और खत्म करने के लिए मैंने इसे विकिपीडिया, इंक्रीमेंट और डिक्रीमेंट ऑपरेटरों से कॉपी किया :
चूंकि वेतन वृद्धि / वेतन वृद्धि ऑपरेटर अपने ऑपरेंड को संशोधित करता है, इसलिए एक ही अभिव्यक्ति के भीतर एक से अधिक बार ऐसे ऑपरेंड का उपयोग अपरिभाषित परिणाम उत्पन्न कर सकता है । उदाहरण के लिए, एक्स - ++ एक्स जैसे अभिव्यक्तियों में, यह स्पष्ट नहीं है कि घटाव और वेतन वृद्धि ऑपरेटरों को किस क्रम में किया जाना चाहिए। इस तरह की स्थिति तब और भी बदतर हो जाती है जब कंपाइलर द्वारा ऑप्टिमाइज़ेशन लागू किया जाता है, जिसके परिणामस्वरूप ऑपरेशन के निष्पादन के क्रम में प्रोग्रामर के उद्देश्य से भिन्न हो सकते हैं।
और इसीलिए।
सही उत्तर यह है कि यह इस्तेमाल नहीं किया जाना चाहिए! (जैसा कि यह अलग है!)
हां .. - इसके अप्रत्याशित परिणाम हैं, भले ही C # मजबूर किसी भी तरह इसे सामान्य करने की कोशिश कर रहा हो।
मुझे C # भाषा के सामान्य या अच्छी तरह से परिभाषित व्यवहार के रूप में आप सभी के व्यवहार का वर्णन करने वाला कोई भी दस्तावेज़ नहीं मिला। जो मैंने पाया वह ठीक विपरीत है!
[ पोस्टफेड इन्क्रीमेंट और डिक्लेरेशन ऑपरेटर्स के लिए MSDN प्रलेखन से कॉपी किया गया: ++ और - ]
जब किसी फ़ंक्शन तर्क के लिए पोस्टफ़िक्स ऑपरेटर को लागू किया जाता है, तो फ़ंक्शन के पास जाने से पहले तर्क का मान बढ़ा या घटाया जाने की गारंटी नहीं होती है। अधिक जानकारी के लिए C ++ मानक में खंड 1.9.17 देखें।
उन शब्दों की सूचना दें जिनकी गारंटी नहीं है ...
मुझे माफ़ कर दो अगर वह जवाब घमंडी लगता है - मैं एक अभिमानी व्यक्ति नहीं हूँ। मैं सिर्फ यह मानता हूं कि हजारों लोग सीखने के लिए यहां आते हैं और मेरे द्वारा पढ़े गए उत्तर उन्हें गुमराह करेंगे और उनके तर्क और विषय की समझ को नुकसान पहुंचाएंगे।