2011-02-05 4 views

उत्तर

31

अपने प्रश्न का उत्तर
सं

क्या होगा
यह होगा:

int x = 1; /* ASSUME THIS IS SO */ 
y = x = x + 1; 

/* Results: */ 
y == 2; 
x == 2; 

यह कैसे संकलित
एक ही रूप में:

x += 1; 
y = x; 

क्यों इस अपरिभाषित
नहीं है क्योंकि आप एक ही अभिव्यक्ति आप इसे पढ़ में x नहीं लिख रहे हैं। आप इसे अपने आप + 1 पर सेट करें, फिर y को x के मान पर असाइन करें।

आपका भविष्य
आप कोड भ्रमित आप पठनीयता के लिए कोष्ठक का उपयोग कर सकते हैं, तो:

y = x = (x + 1); 
+2

सिर्फ अपनी जानकारी के लिए, मुनूट, असाइनमेंट के "वापसी मूल्य" के रूप में यह अपना मूल्य है, आप इसे अन्य चीजों के लिए भी उपयोग कर सकते हैं, जैसे 'if (1 == x = 1)', जो एक सुंदर आम है बग और कारण, डेवलपर्स 'x == 1' के बजाय' 1 == x' लिखना पसंद करते हैं (क्योंकि आप x से 1 असाइन नहीं कर सकते हैं)। – anroesti

+34

एकमात्र डेवलपर्स जो मुझे पता है कि '1 == x' जैसी चीज़ें लिखते हैं, वे हैं जिनके साथ मैं काम नहीं करूंगा ... –

+19

@andre: नहीं, "डेवलपर्स" इसे लिखना पसंद नहीं करते हैं। यह सकल, अशुद्ध, और बेकार है; बस पिछले दशक में शामिल हों और अपनी कंपाइलर चेतावनियां चालू करें। – GManNickG

9

नहीं। आप केवल एक बार x संशोधित, और = के दाएँ संबद्धता कि काम की वजह से होता है y पर असाइनमेंट से पहले। भले ही ऐसा हुआ, फिर भी x का केवल एक संशोधन है। आपका कथन y = ++x के रूप में कानूनी है।

17

नहीं, आपकी अभिव्यक्ति ठीक से परिभाषित की गई है। आप शायद y = x = x++; की तलाश में थे, जो नहीं है।

+0

'y = x = x ++ नहीं होगा;' y = x = x के बराबर हो; एक्स + = 1; '? इसे ठीक से परिभाषित क्यों नहीं किया जाएगा? – rzetterberg

+0

या यह 'y = x = x + 1 के बराबर होगा; एक्स + = 1; ', या' y = x + 1 = x; एक्स + = 1; '? –

+0

मैं पूछ रहा था क्योंकि मुझे यकीन नहीं था और मैं जानना चाहता था कि क्यों 'x + 1' ठीक था, लेकिन' x ++ 'नहीं था। – rzetterberg