2010-02-26 7 views
13

:भ्रामक उपयोग एक मैं C++ कोड के इस टुकड़े है 'अगर' बयान

ihi = y[0]>y[1] ? (inhi=1,0) : (inhi=0,1); 

लेकिन यह सी # में कैसे दिखते हैं?

+0

ihi और inhi किस प्रकार हैं? – RAL

+0

मुझे क्षमा करें हाँ cs = C# और ihi और inhi दोनों इंटरगर प्रकार – Victor

+0

@Byers IMHO http://en.wikipedia.org/wiki/C_Sharp_(programming_language) –

उत्तर

14

यह इस का अर्थ है:

if (y[0]>y[1]) 
{ 
    inhi = 1; 
    ihi = 0; 
} else { 
    inhi = 0; 
    ihi = 1; 
} 

या किसी अन्य तरीके से लिखा (C++):

inhi = (y[0]>y[1]); 
ini = !inhi; 
+0

याह, मैं मूल रूप से बूल थे, तो मैं आपके दूसरे संस्करण के समान सोच रहा था। – RAL

9

अल्पविराम ऑपरेटर काम की तुलना में कम बांधता है, इसलिए अभिव्यक्ति

inhi=1,0 

सेट inhi1, और फिर 0 देता है। इसी तरह

inhi=0,1 

सेट 0 करने के लिए inhi और 1 देता है। यह पूरी बात

if(y[0] > y[1]) { 
    inhi = 1; 
    ihi = 0; 
} else { 
    inhi = 0; 
    ihi = 1; 
} 

के बराबर है, यदि आप कर सकते हैं, तो मैं इसे इस तरह लिखने का सुझाव दूंगा। inhi और ihi का एक ही उद्देश्य (इस कथन में), और संयोजन टर्नरी ऑपरेटर (?:) और अल्पविराम ऑपरेटर है जो आपको उन्हें अलग-अलग वजन देता है।

+0

यह स्पष्ट है, स्पष्टीकरण जेसी के लिए धन्यवाद, कारण मैं अनुवाद के बाद था (सी ++ से सी # तक) जैसा कि आपने कहा था (? :) और कॉमा का उपयोग सी # में संकलित नहीं हुआ था। – Victor

1

comma operator बारी में तर्क का मूल्यांकन करता है और उसके बाद पिछले का मूल्यांकन अभिव्यक्ति देता है। अर्थात। यदि आप निम्न कोड

int four = 2 + 2, mul(2,2), 4; 

एक सख्ती से-निम्न-विनिर्देश गैर के अनुकूलन संकलक पहले 2 और 2 जोड़ देगी और उसके बाद परिणाम को निरस्त किया था, तो समारोह mul फोन और वापसी मान त्यागने और अंत में मूल्यांकन 4 जो तब i चर को सौंपा गया है।

ध्यान दें कि प्रत्येक कॉमा के बाद sequence point है, इसलिए पिछले मूल्यांकन के सभी दुष्प्रभावों का प्रदर्शन किया जाएगा। जैसे

ihi = y[0]>y[1] ? (inhi=1,0) : (inhi=0,1); 

में inhi लिए काम किया है और इससे पहले किihi अद्यतन किया जाता है समाप्त हो गया है। और इसका यह भी अर्थ है कि एक कंपाइलर ऊपर दिए गए उदाहरण में mul पर कॉल को ऑप्टिमाइज़ नहीं कर सकता है, जब तक कि यह सुनिश्चित न हो कि mul फ़ंक्शन के मूल्य को वापस करने के अलावा कोई दुष्प्रभाव नहीं है। आमतौर पर ऐसा कुछ नहीं है जो संकलक जानता है, हालांकि सी ++ में फ़ंक्शंस को const के रूप में चिह्नित करना संभव है जिसके द्वारा संकलक को बताया जाता है।

+0

-1, पहली पंक्ति संकलित नहीं होगी और 'const' पिछले पैराग्राफ में वर्णित तरीके से काम नहीं करती है। – avakar

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