2011-01-22 12 views
5

सी प्राथमिकता सारणी के अनुसार, टर्नरी सशर्त ऑपरेटर के पास दाएं से बाएं सहयोगीता है।फिर भी एक अन्य सशर्त ऑपरेटर नेस्टिंग प्रश्न

तो, क्या यह सीधे समकक्ष के बराबर परिवर्तनीय है-और सीढ़ी?

उदाहरण के लिए, कर सकते हैं:

x?y?z:u:v; 

बस के रूप में व्याख्या की जा: एक किसी और (मिलान :) अगर निकटतम अयुगल (साथ द्वारा

if(x) 
{ 
    if(y) 
    { z; } 
    else 
    { u; } 
} 
else 
{ v; } 

)? या दाएं से बाएं सहयोगीता कुछ अन्य व्यवस्था का मतलब है?

उत्तर

14

उदाहरण दिया था केवल (यदि बयान दिया था) की तरह एक तरह से व्याख्या की जा सकती, त्रिगुट ऑपरेटर दाएँ-से था कि क्या बाएं या बाएं से दाएं सहयोगीता।

कहाँ दाएँ-से-बाएँ संबद्धता मामलों जब आपके पास है:

x = a ? b : c ? d : e; 

कौन सा रूप में व्याख्या की है: x = (a ? b : c) ? d : e के रूप में नहीं x = a ? b : (c ? d : e),।

int getSign(int x) { 
    return x<0 ? -1 : 
      x>0 ? 1 : 
        0; 
} 

यह (शायद अधिक पठनीय) के समान है/बाकी-अगर बयान करता है, तो:

एक और अधिक यथार्थवादी उदाहरण के लिए

int getSign(int x) { 
    if (x<0) 
     return -1; 
    else if (x>0) 
     return 1; 
    else 
     return 0; 
} 
5

आपकी धारणा सही है; तथापि, यह अक्सर बुद्धिमान पठनीयता के लिए कोष्ठक में जोड़ने के लिए उदाहरण के लिए है,:

x?(y?z:u):v 
+2

+1 हालांकि मैं कहूंगा कि यह और भी है बुद्धिमान * नहीं * असली उत्पादन कोड में कभी भी सशर्त ऑपरेटर घोंसला :-) –

+0

@ पीटर टोरोक: सहमत! – Ray

+3

मुझे लगता है कि "उपयोग नहीं कर रहा" अतिरंजित है। '' '' '' '' '' '' '' '' '' के साथ बदलें और ':' के साथ, और आपके पास कई भाषाओं में पूरी तरह से वैध चयन वाक्यविन्यास है। मैं हर समय घोंसला सशर्त लिखता हूं, सुनिश्चित करता हूं कि प्रत्येक नया? और: सही इंडेंटेशन के साथ, एक नई लाइन पर दिखाई देता है। यह किसी भी अगर/अन्य ब्लॉक के रूप में पठनीय है। –

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