2012-07-15 10 views
13

सभी रखरखाव और मुद्दों को एक तरफ रखते हुए, क्या कोड की ये पंक्तियां अनिर्धारित व्यवहार उत्पन्न कर सकती हैं?संदर्भ चर प्रारंभ करने के लिए टर्नरी ऑपरेटर का उपयोग करना?

float a = 0, b = 0; 
float& x = some_condition()? a : b; 
x = 5; 
cout << a << ", " << b; 
+2

भी सरल हो सकता है कर रहे हैं: '(some_condition()? ए: बी) = 5; ' – Slava

उत्तर

10

नहीं, यह ठीक है। यह इस कोड में अपरिभाषित व्यवहार नहीं बनाएगा। स्थिति के अनुसार, आप केवल ए या बी के मूल्य को 5 में बदल देंगे।

8

यह बिलकुल ठीक है, जब तक सशर्त के दोनों ओर भाव है कि एक संदर्भ प्रारंभ करने में इस्तेमाल किया जा सकता है (जैसे चर, सूचक dereferences, आदि)

float& x = some_condition()? a : *(&b); // This is OK - it is the same as your code 
float& x = some_condition()? a : b+1; // This will not compile, because you cannot take reference of b+1 
+0

ठीक है, संकलन करने में असमर्थता पूरी तरह परिभाषित व्यवहार है, है ना? –

+0

तर्कसंगत रूप से, हां- एक बीमार गठित कार्यक्रम परिभाषित व्यवहार प्रदर्शित करता है- कुछ भी नहीं। – Puppy

+1

तेजी से विफल, जल्दी विफल। –

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