मैं वर्तमान में C ++ प्राइमर पुस्तक के साथ C ++ सीख रहा हूं और पुस्तक में एक अभ्यास है:
बताएं कि निम्नलिखित अभिव्यक्ति क्या करती है:
someValue ? ++x, ++y : --x, --y
हम क्या जानते हैं? हम जानते हैं कि टर्नरी ऑपरेटर की कॉमा ऑपरेटर की तुलना में अधिक पूर्वता है। बाइनरी ऑपरेटरों के साथ यह समझने में काफी आसान था, लेकिन टर्नरी ऑपरेटर के साथ मैं थोड़ा संघर्ष कर रहा हूं। बाइनरी ऑपरेटरों के साथ "उच्च पूर्वता होने" का अर्थ है कि हम अभिव्यक्ति के चारों ओर कोष्ठक का उपयोग उच्च वरीयता के साथ कर सकते हैं और यह निष्पादन को नहीं बदलेगा।
टर्नरी ऑपरेटर के लिए मैं यह करूंगा:
(someValue ? ++x, ++y : --x, --y)
प्रभावी रूप से उसी कोड के परिणामस्वरूप जो मुझे समझने में मदद नहीं करता है कि कंपाइलर कोड को कैसे समूहित करेगा।
हालाँकि, C ++ कंपाइलर के परीक्षण से मुझे पता है कि अभिव्यक्ति संकलित है और मुझे नहीं पता कि एक :
ऑपरेटर खुद के लिए क्या खड़ा कर सकता है। तो संकलक को टर्नेरी ऑपरेटर की सही व्याख्या करना प्रतीत होता है।
फिर मैंने कार्यक्रम को दो तरीकों से अंजाम दिया:
#include <iostream>
int main()
{
bool someValue = true;
int x = 10, y = 10;
someValue ? ++x, ++y : --x, --y;
std::cout << x << " " << y << std::endl;
return 0;
}
का परिणाम:
11 10
जबकि दूसरी ओर इसके साथ someValue = false
प्रिंट:
9 9
C ++ कंपाइलर कोड क्यों उत्पन्न करेगा, जो कि टर्नरी ऑपरेटर की सच्ची शाखा के लिए केवल वेतन वृद्धि है x
, जबकि टर्नरी की झूठी-शाखा के लिए यह दोनों को घटाता है x
और y
?
मैं भी इस तरह से सच्ची शाखा के चारों ओर कोष्ठक डालने के रूप में दूर चला गया:
someValue ? (++x, ++y) : --x, --y;
लेकिन इसका परिणाम अभी भी है 11 10
।
?
है सशर्त ऑपरेटर । टर्नेरी ऑपरेटर शब्द का अर्थ है तीन ऑपरेटर वाला ऑपरेटर। सशर्त ऑपरेटर एक टर्नरी ऑपरेटर का एक उदाहरण है , लेकिन एक भाषा (सैद्धांतिक रूप से) में कई टर्नरी ऑपरेटर हो सकते हैं।