दिलचस्प पोस्ट
आर डेटटाइम सीरियल नंबर को आर डेटटाइम में परिवर्तित करना सीसी में उपयोग करने के लिए एक अच्छा हैशिंग एल्गोरिथ्म BCrypt है? मैं इसे कहाँ पा सकता हूँ? यूनिटी में साधारण इवेंट सिस्टम एन.टी. प्रधान संख्या की गणना और छपाई स्थानांतरित वस्तु से मैं क्या कर सकता हूं? पायथन में अनन्य एक्सेस के लिए फ़ाइल खोलने का सबसे अच्छा तरीका क्या है? ऑपरेशन में 1 कॉलम होना चाहिए – MySQL नहीं है एक कस्टम फ़ॉन्ट का उपयोग करते समय समस्या – "मूल टाइपफ़ेस नहीं बनाया जा सकता" सी कंपाइलर संरेखण पैडिंग को खत्म करने के लिए संरचना सदस्यों को पुनर्व्यवस्थित क्यों नहीं कर सकता? एंड्रॉइड पर एक स्ट्रिंग को एक पूर्णांक में कनवर्ट करना सूची बनाम बाइनरी ट्री छोड़ें एक JSON सरणी में एक तत्व खोजने के लिए सूचकांक मुझे टर्बो सी ++ का उपयोग क्यों नहीं करना चाहिए? एनजी-एप और डेटा-एनजी-एप के बीच अंतर क्या है? एक निश्चित बिंदु पर निश्चित स्थिति स्क्रोलिंग रोकना?

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

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

वेब के समाधान से एकत्रित समाधान "सी और सी ++ के बीच सशर्त ऑपरेटर अंतर"

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

 (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;