5

आप निम्नलिखित है:एक परिभाषित रास्ते में त्रिगुट ऑपरेटर शॉर्ट सर्किट करता

if (x) 
{ 
    y = *x; 
} 
else 
{ 
    y = 0; 
} 

तो व्यवहार हम कर सकते हैं के बाद से ही x भिन्नता अगर यह 0

नहीं किया जा सकता है परिभाषित करने की गारंटी दी गई है उसी के लिए कहा जा सकता है:

y = (x) ? *x : 0; 

यह अपेक्षा के अनुरूप (यहां तक ​​कि ग्राम पर -Wpedantic साथ संकलित ++) काम करने के लिए लगता है

क्या यह गारंटी है?

+0

हां - टर्नरी ऑपरेटर सिर्फ वाक्य रचनात्मक चीनी –

+3

हां है। (उत्तर के रूप में पोस्ट करने के लिए बहुत छोटा)। – JSF

+0

टर्नरी अभिव्यक्ति में कोई "शॉर्ट सर्किट" नहीं है। और यह स्थिति पूरी तरह से मूल्यांकन किए जाने से पहले किसी भी शाखा का समय से मूल्यांकन या निष्पादित नहीं करता है। –

उत्तर

12

हाँ, केवल दूसरे या तीसरे संकार्य मूल्यांकन किया जाएगा, मसौदा सी ++ मानक खंड 5.16[expr.cond] का कहना है:

सशर्त भाव समूह दाएँ-से-छोड़ दिया है। पहली अभिव्यक्ति को संदर्भित रूप से बूल (क्लॉज 4) में परिवर्तित किया जाता है। इसका मूल्यांकन किया गया है और यदि यह सत्य है, तो सशर्त अभिव्यक्ति का परिणाम दूसरी अभिव्यक्ति का मूल्य है, अन्यथा तीसरी अभिव्यक्ति का। केवल दूसरे और तीसरे अभिव्यक्तियों में से एक का मूल्यांकन किया जाता है। प्रत्येक मान पहली अभिव्यक्ति से जुड़ी गणना और साइड इफेक्ट प्रत्येक मान गणना और दूसरी या तीसरी अभिव्यक्ति से जुड़े साइड इफेक्ट से पहले अनुक्रमित है।

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