दिलचस्प पोस्ट
पाप्लोट स्कैटर साजिश मार्कर का आकार फायरबसे एफसीएम फोर्स ऑन टॉकनफ्रेश () को कॉल करने के लिए जावा में क्लासी का मतलब क्या है? Stdio.h कार्य कार्यान्वयन कहाँ खोजना है? पायथन – कैलेंडर.टाइमगाम () बनाम time.mktime () TextView या WebView में टेक्स्ट हाइलाइट करें एक ब्राउज़र में अधिकतम समानांतर http कनेक्शन? उड़ी से बिटमैप कैसे प्राप्त करें? दुर्भाग्य से नेटवर्क की जांच करते समय ऐप बंद हो जाता है मैं int से स्ट्रिंग कैसे बदलूं? फ़ाइल में एक विशिष्ट पंक्ति को हटाना (अजगर) ASP.NET MVC रूटिंग विधि विधि के माध्यम से Setuptools / वितरण के साथ पैकेज डेटा को कैसे शामिल किया जाए? जावा में दी गई विधि को कॉल करने वाले सभी तरीकों को मैं कैसे प्राप्त करूं? JS / jQuery में बाध्यकारी तीर कुंजियाँ

सी और सी ++ के बीच सशर्त ऑपरेटर अंतर

मैंने कहीं पढ़ा है कि ?: सी में ऑपरेटर सी ++ में थोड़ा अलग है, कि कुछ स्रोत कोड है जो दोनों भाषाओं में अलग तरीके से काम करता है। दुर्भाग्य से, मुझे पाठ कहीं भी नहीं मिल सकता है क्या किसी को पता है कि यह अंतर क्या है?

Solutions Collecting From Web of "सी और सी ++ के बीच सशर्त ऑपरेटर अंतर"

सी ++ में सशर्त ऑपरेटर एक लावल्यू वापस कर सकते हैं, जबकि सी समान कार्यक्षमता की अनुमति नहीं देता है। इसलिए, सी ++ में निम्नलिखित कानूनी है:

 (true ? a : b) = 1; 

इसे सी में दोहराने के लिए, आपको / else, या सीधे संदर्भ के साथ सौदा करने का सहारा देना होगा:

 *(true ? &a : &b) = 1; 

इसके अलावा सी ++ में, ?: और = ऑपरेटर्स की समान प्राथमिकता और समूह सही-से-बाएं है , इस प्रकार है कि:

 (true ? a = 1 : b = 2); 

वैध C ++ कोड है, लेकिन पिछली अभिव्यक्ति के चारों कोष्ठक के बिना सी में एक त्रुटि डाल देगा:

 (true ? a = 1 : (b = 2)); 

मुख्य व्यावहारिक अंतर यह है कि सी में, का मूल्यांकन:? कभी भी एल-वैल्यू में न हो, जहां सी ++ में यह हो सकता है

इसकी परिभाषा में अन्य मतभेद हैं जिनमें कुछ व्यावहारिक परिणाम हैं। सी ++ में पहला ऑपरेंड एक बूल में कनवर्ट किया जाता है, सी में इसकी तुलना 0 के साथ की जाती है। यह सी और सी ++ के बीच ==,! =, आदि की परिभाषा में अंतर के बराबर है।

दूसरे और तीसरे ऑपरेंड के प्रकारों के आधार पर अभिव्यक्ति: किस प्रकार के प्रकार को कम करने के लिए सी ++ में अधिक जटिल नियम हैं? यह C ++ में उपयोगकर्ता परिभाषित अंतर्निहित रूपांतरण की संभावना को दर्शाता है

उदाहरण कोड वैध सी ++; अमान्य सी।

 extern int h(int p, int q); int g(int x) { int a = 3, b = 5; (x ? a : b) = 7; return h( a, b ); } 

gcc त्रुटि उत्पन्न करता है: "त्रुटि: असाइनमेंट में अमान्य लावल्यू" जब सी के रूप में संकलन करते हैं, लेकिन सी + + के रूप में संकलन करते समय त्रुटि के बिना कोड संकलित होता है

संपादित करें: यद्यपि ?: सी में एक एल-मूल्य नहीं लौटा सकते, शायद इसके लिए व्याकरण आश्चर्यजनक है: है:

 conditional-expression: logical-OR-expression logical-OR-expression ? expression : conditional-expression 

इसका मतलब यह है कि a ? b : c = d a ? b : c = d रूप में पार्स (a ? b : c) = d हालांकि ('एक एल मूल्य' नियम के कारण) यह एक वैध अभिव्यक्ति में परिणाम नहीं कर सकते

सी ++ व्याकरण को इस पर बदलता है:

 conditional-expression: logical-or-expression logical-or-expression ? expression : assignment-expression 

हालाँकि कुछ परिस्थितियों में सशर्त-अभिव्यक्ति को एल-मान होने की अनुमति देने के लिए विस्तार होता है a ? b : c = d a ? b : c = d व्याकरण परिवर्तन के बिना वैध, नया व्याकरण परिवर्तन का अर्थ है कि अभिव्यक्ति अब मान्य है लेकिन एक के विभिन्न अर्थों के साथ a ? b : (c = d) a ? b : (c = d)

हालांकि इसके लिए मेरे पास कोई सबूत नहीं है, मेरा अनुमान है कि व्याकरण परिवर्तन के रूप में मौजूदा सी कोड के साथ संगतता नहीं तोड़ सकता है, यह अधिक संभावना है कि नया व्याकरण अभिव्यक्तियों के साथ कम आश्चर्य पैदा करेगा:

 make_zero ? z = 0 : z = 1;