2012-07-31 18 views
7

मैं हाल ही में codebase में निम्नलिखित को देखा। यहां वास्तव में क्या चल रहा है? सशर्त ऑपरेटर के लिए दस्तावेज़ अभिव्यक्तियों को चेन करने के बारे में कुछ भी नहीं बताते हैं।यह अजीब सशर्त ऑपरेटर वाक्यविन्यास क्या है?</p> <pre><code>bool bRes = (a < b) ? a=b, true : false; </code></pre> <p>तो <code>a < b</code>, तो <code>a=b</code> निष्पादित किया जाता है और <code>bRes</code> सत्य है:

संपादित करें: स्पष्ट होने के लिए मुझे सशर्त ऑपरेटर भाग मिलता है, यह a=b, true एक अभिव्यक्ति के रूप में है जो मुझे भ्रमित करता है।

+2

अल्पविराम ऑपरेटर है कि ... – MFH

उत्तर

11

ई। यह comma operator का उपयोग है। a=b, true ठीक वही करता है जो आपने कहा था। यह प्रत्येक अभिव्यक्ति को निष्पादित करता है और परिणाम अंतिम अभिव्यक्ति के मूल्य में निष्पादित करता है।

+1

+1 eww है ... मेरी पहली प्रतिक्रिया के रूप में अच्छी तरह से किया गया था। –

+1

+1 हाहाहाहा ... आपने अभी तक कॉमा ऑपरेटर का असली "ईह" उपयोग नहीं देखा है। मेरा सर्वकालिक पसंदीदा [सबबोटिन की कैरलेसलेस रेंज कोडर] में है (http://koders.com/cpp/fidAD810238688D2DDBC02B8FAF0A8EAC8DBD68604D.aspx?s=subbotin#L21)। बस 30 सेकंड से कम समय के लिए उस रेखा को देखो, और फिर यह बताने की कोशिश करें कि क्या हो रहा है। – Damon

+0

बहुत अच्छा, धन्यवाद! – nolegs

4

यह एक सही कोड है, लेकिन एक अजीब शैली में लिखा है। भाषा इस तरह अल्पविराम ऑपरेटर का उपयोग करने की अनुमति देता है।

बराबर

bool bRes; 
if (a < b) 
{ 
a = b; 
bRes = true; 
} 
else 
bRes = false; 
+0

यह वही चीज़ लिखने का एक बेहतर तरीका है। बहुत बढ़िया! –

+0

लेकिन अब यह असाइनमेंट है और प्रारंभिक नहीं है। मूल कोड में, हमने 'बीआरईएस' को 'const' घोषित कर दिया होगा ... –

+2

@ केरेकस्क: अच्छा बिंदु। कैसे 'कॉन्स्ट बूल बीआरएस = ए <बी; अगर (बीआरईएस) ए = बी; '? – Andrey

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