हम जानते हैं कि टर्नरी ऑपरेटर को if..else क्लॉज के बजाय लागू किया जाता है। इसे ?:द्वारा दर्शाया जाता है। '?' प्रतीक अगर भाग के बराबर है और ':' अन्य भाग के बराबर है। निम्नलिखित 3 कार्यक्रम टर्नरी ऑपरेटर के मामले में कुछ दिलचस्प अवलोकन की व्याख्या करते हैं।
निम्नलिखित प्रोग्राम बिना किसी त्रुटि के संकलन करने में सक्षम है। टर्नरी एक्सप्रेशन का रिटर्न प्रकार फ़्लोट होने की उम्मीद है (एक्सपी 2 के रूप में) और एक्सप 3 (यानी शाब्दिक शून्य - इंट टाइप) परोक्ष रूप से फ्लोट में परिवर्तित करने में सक्षम है।
#include <iostream> using namespace std; int main(){ int test1 = 0; float fvalue = 3.111f; cout<< (test1 ? fvalue : 0) << endl; return 0; }
निम्नलिखित प्रोग्राम संकलित करने में सक्षम नहीं होगा, इसका कारण यह है कि कंपाइलर टर्नरी एक्सप्रेशन के रिटर्न प्रकार का पता लगाने या खोजने में सक्षम नहीं है या निहित रूपांतरण exp2 (चार सरणी) और exp3 (int) के बीच अनुपलब्ध है।
#include <iostream> using namespace std; int main(){ int test1 = 0; cout<< test1 ? "A String" : 0 << endl; return 0; }
निम्न प्रोग्राम संकलित करने में सक्षम हो सकता है, या रनटाइम पर विफल हो सकता है। टर्नरी एक्सप्रेशन का रिटर्न प्रकार सीमित या टाइप (चार *) तक सीमित है, फिर भी एक्सप्रेशन इंट लौटाता है, इसलिए प्रोग्राम विफल हो जाता है। शाब्दिक रूप से, प्रोग्राम निष्पादन समय या रनटाइम पर स्ट्रिंग को 0वें पते पर प्रिंट करने का प्रयास करता है।
#include <iostream> using namespace std; int main(){ int test1 = 0; cout << (test1 ? "A String" : 0) << endl; return 0; }
हम देख सकते हैं कि exp2 को आउटपुट प्रकार के रूप में माना जाता है और exp3 निष्पादन समय या रनटाइम पर exp2 में परिवर्तित हो सकेगा। यदि रूपांतरण को निहित माना जाता है तो संकलक रूपांतरण के लिए स्टब्स डालता है। यदि रूपांतरण को स्पष्ट रूप से माना जाता है तो संकलक एक त्रुटि फेंकता है। यदि कोई कंपाइलर ऐसी त्रुटि को पकड़ने में चूक जाता है, तो प्रोग्राम निष्पादन समय या रनटाइम पर विफल हो सकता है।