दिलचस्प पोस्ट
गैर स्थैतिक फ़ंक्शन के साथ सी ++ ओवरलोड स्टेटिक फ़ंक्शन यूएस फोन नंबर सत्यापन एक्लिप्स में शामिल बाहरी पुस्तकालयों के साथ एक जार कैसे बनाएं? _t (अंडरस्कोर-टी) द्वारा किस प्रकार का अनुसरण किया जाता है? क्या ऐसा फ़ाइल डाउनलोड करने के लिए एक लिंक जोड़ना संभव है जिसे केवल फेसबुक पर साझा करने से डाउनलोड किया जा सकता है? विदेशी कुंजी (एसकेएल) के रूप में समग्र कुंजी एक कंपाइलर लिखना सीखना पायथन सेलेनियम वेब ड्रिवर मेरी अपनी उम्मीद की स्थिति लेखन जेएसडीपी में जेडीपी पेज में एमडीसी और डीएओ पैटर्न का उपयोग करते हुए JDBC ResultSet सेट करें किसी ऑब्जेक्ट में एक JSON स्ट्रिंग को सुरक्षित रूप से बदलना AngularJS गतिशील रूटिंग प्रस्तुतकर्ता विशेषता द्वारा कितनी बार बुलाया जाता है? कुछ फोंट दिखाई नहीं दे रहे हैं? बफर अतिप्रवाह को सक्षम करने के लिए जीसीसी संकलक ऑप्टिमाइज़ेशन को बंद कैसे करें स्पार्क एमएललिब एलडीए, नए अनदेखी दस्तावेजों के विषय वितरण को समझने के लिए कैसे?

सी ++ में सशर्त ऑपरेटर के अंदर कॉमा ऑपरेटर की प्राथमिकता क्या है?

यहाँ क्या हो रहा है?

#include <iostream> using namespace std; int main(){ int x=0,y=0; true? ++x, ++y : --x, --y; cout << "x: " << x << endl; cout << "y: " << y << endl; //why does y=0 here? x=0,y=0; false ? ++x, ++y : --x, --y; cout << "x: " << x << endl; cout << "y: " << y << endl; } x: 1 y: 0 x: -1 y: -1 

दूसरा मामला ठीक लगता है मुझे उम्मीद है कि पहले और पहले दोनों मामलों में एक्स और वाई दोनों में बढ़ोतरी होनी चाहिए, लेकिन केवल बाएं हाथ का संचालन वेतन वृद्धि

Solutions Collecting From Web of "सी ++ में सशर्त ऑपरेटर के अंदर कॉमा ऑपरेटर की प्राथमिकता क्या है?"

पहले एक के बराबर है:

 (true ? (++x, ++y) : (--x)), --y; 

दूसरे के बराबर है:

 (false ? (++x, ++y) : (--x)), --y; 

इस --y हमेशा निष्पादित होता है। पहली पंक्ति में, वेतन वृद्धि पहले क्रियान्वित की जाती है, इसलिए x = 1, y = 0 अपेक्षित है। दूसरी पंक्ति में, x की कमी पहले क्रियान्वित की जाती है, इसलिए x = -1, y = -1 अपेक्षित है।


जैसा कि बार्मर द्वारा एक टिप्पणी में (एक और जवाब के लिए) में बताया गया है:

और अगर कोई सोच रहा है कि ++x और ++y बीच के अल्पविराम का कोई भी प्रभाव नहीं है, तो ऐसा इसलिए है क्योंकि (true? ++x) बिल्कुल भी मान्य नहीं होगा। इसलिए कंपाइलर स्कैनिंग को तब तक स्कैन कर देता है जब तक कि यह पाता नहीं है : लेकिन इसके बाद यह रोकता है जब यह एक कम वरीयता ऑपरेटर [या , इस उदाहरण में] या बयान के अंत तक पहुँच जाता है ]

y शून्य है क्योंकि कॉमा में सभी C ++ ऑपरेटरों के बीच सबसे कम वरीयता है । क्योंकि इसकी प्राथमिकता टर्नरी सशर्त ऑपरेटर की तुलना में कम है, सशर्त ऑपरेटरों को true? ++x, ++y : --x रूप में पार्स किया जाता true? ++x, ++y : --x true? ++x, ++y : --x और false? ++x, ++y : --x false? ++x, ++y : --x दोनों ही मामलों में, --y कथन निष्पादित है बिना शर्त

संपादित करें पहला कॉमा अलग है क्योंकि कंपाइलर को मिला है ? , इसलिए अब इसकी आवश्यकता है : सशर्त के "जब सच" अभिव्यक्ति को पूरा करने के लिए यही कारण है कि दोनों ++x और ++y इन में ले जाया जाता है

मानक पढ़ें

§5.18 कॉमा ऑपरेटर [expr.comma]

¶1 कॉमा ऑपरेटर समूह बाएं से दाएं

 expression: assignment-expression expression , assignment-expression 

अल्पविराम से अलग अभिव्यक्ति की एक जोड़ी को बाएं से दायें मूल्यांकन किया गया है; बाएं अभिव्यक्ति एक त्याग अभिव्यक्ति (खंड 5) है 83 हर मूल्य गणना और सही अभिव्यक्ति से जुड़े साइड इफेक्ट से पहले बाएं अभिव्यक्ति से जुड़ी हर मूल्य गणना और साइड इफेक्ट क्रमबद्ध है। परिणाम का प्रकार और मूल्य सही ऑपरेंड के प्रकार और मूल्य हैं; इसका परिणाम एक ही मान श्रेणी का है, जिसका सही ऑपरेंड है, और यह एक बिट-फ़ील्ड है यदि इसका सही ऑपरेंड एक ग्लुव्यू और बिट-फ़ील्ड है।

¶2 कॉमा को विशेष अर्थ दिया गया है, जहां संदर्भ में, [उदाहरण: कार्य करने के लिए तर्कों की सूची (5.2.2) और प्रारंभकर्ताओं की सूची (8.5) – उदाहरण के लिए) क्लॉज 5 में वर्णित कॉमा ऑपरेटर केवल कोष्ठकों में प्रकट हो सकते हैं । [ उदाहरण:

 f(a, (t=3, t+2), c); 

तीन तर्क हैं, जिनमें से दूसरे का मान 5 है। उदाहरण के लिए]