दिलचस्प पोस्ट
jquery ui संवाद: प्रारंभ करने से पहले संवाद पर तरीकों को कॉल नहीं कर सकता घड़ी () फ़ंक्शन का उपयोग करके कार्यों को शेड्यूल करने के दौरान समस्या इंटरनेट एक्सप्लोरर 11 में VBScript समर्थन एंड्रॉइड के लिए एक्लिप्स में प्रोगुर्ड को सक्षम करना PHP DomDocument UTF-8 वर्ण (☆) को संभालने में असफल रहा है पायथन के साथ UTF-8 स्ट्रिंग को MySQL लिखना Ggplot2 के साथ एक मंडल बनाएं क्या एक कर्सर का उपयोग किए बिना टीएसक्यूएल में टेबल वैरिएबल के माध्यम से लूप का कोई तरीका है? Android में getSharedPreferences का उपयोग कैसे करें जावास्क्रिप्ट सरणियों विरल हैं? BOOT_COMPLETED एंड्रॉइड काम नहीं कर रहा है कोड का उपयोग करते हुए डिवाइस स्क्रीन आकार की श्रेणी (छोटे, सामान्य, बड़े, एक्सलर्ज) निर्धारित करने के लिए कैसे करें? वर्तमान निर्देशिका में सभी उपनिर्देशिका की सूची प्राप्त करना एंड्रॉइड में वैश्विक असंतुलित अपवाद हैंडलर सेट करने का आदर्श तरीका ऐप्पल कैसे जानता है कि आप निजी एपीआई का उपयोग कर रहे हैं?

वापसी का प्रकार '?:' (टर्नरी सशर्त ऑपरेटर)

पहले एक संदर्भ क्यों वापस करता है?

int x = 1; int y = 2; (x > y ? x : y) = 100; 

जबकि दूसरा नहीं है?

 int x = 1; long y = 2; (x > y ? x : y) = 100; 

दरअसल, दूसरा भी संकलन नहीं करता – "असाइनमेंट के बचे नहीं छोड़े"।

वेब के समाधान से एकत्रित समाधान "वापसी का प्रकार '?:' (टर्नरी सशर्त ऑपरेटर)"

अभिव्यक्तियों में वापसी प्रकार नहीं होते हैं, उनके पास एक प्रकार है और – जैसा कि नवीनतम सी ++ मानक – एक मान श्रेणी में जाना जाता है।

एक सशर्त अभिव्यक्ति एक lvalue या एक rvalue हो सकता है यह इसकी वैल्यू श्रेणी है (यह सरलीकरण का कुछ हिस्सा है, C++11 हमारे पास लावलुओं, एक्सवल्यूस और प्रेंवल्यूज़ हैं।)

बहुत व्यापक और सरल शब्दों में, एक लावल्यू स्मृति में एक ऑब्जेक्ट को संदर्भित करता है और एक रैवल्यू सिर्फ एक मूल्य है जो मेमोरी में किसी ऑब्जेक्ट से जुड़ा नहीं हो सकता है

एक असाइनमेंट अभिव्यक्ति ऑब्जेक्ट के लिए एक मान निर्दिष्ट करती है, इसलिए सौंपी गई चीज़ को एक लावल्यू होना चाहिए।

एक सशर्त अभिव्यक्ति ( ?: 🙂 के लिए एक लावल्यू (फिर से, व्यापक और सरल शब्दों में) होने के लिए, दूसरे और तीसरे ऑपरेंडों को उसी प्रकार के गुण होना चाहिए । इसका कारण यह है कि एक सशर्त अभिव्यक्ति के प्रकार और मूल्य वर्ग को समय संकलित करने पर निर्धारित किया जाता है और उपयुक्त होना चाहिए चाहे स्थिति सही है या नहीं। अगर किसी एक ऑपरेंड को दूसरे से मिलान करने के लिए एक अलग प्रकार के रूप में परिवर्तित किया जाना चाहिए तो सशर्त अभिव्यक्ति एक लावलू नहीं हो सकती क्योंकि इस रूपांतरण का परिणाम एक लावलू नहीं होगा।

आईएसओ / आईईसी 14882: 2011 संदर्भ:

3.10 [basic.lval] Lvalues ​​और rvalues ​​(मूल्य श्रेणियों के बारे में)

5.15 [एक्सक्रोकॉन्ड] सशर्त ऑपरेटर (एक सशर्त अभिव्यक्ति में किस प्रकार और मूल्य श्रेणी के नियम हैं)

5.17 [expr.ass] असाइनमेंट और यौगिक असाइनमेंट ऑपरेटरों (आवश्यकता है कि एक असाइनमेंट के एलएएस एक संशोधनीय लावलू होना चाहिए)

टर्नरी का प्रकार ?: अभिव्यक्ति इसकी दूसरी और तीसरी तर्क का आम प्रकार है यदि दोनों प्रकार समान होते हैं, तो आपको संदर्भ वापस मिलता है। अगर वे एक-दूसरे के लिए परिवर्तनीय होते हैं, तो एक को चुना जाता है और दूसरा परिवर्तित हो जाता है (इस मामले में पदोन्नत)। चूंकि आप एक अस्थायी (कनवर्ट / प्रोन्नेट किए गए वैरिएबल) के लिए एक लावल्यू संदर्भ नहीं लौटा सकते, इसके प्रकार एक वैल्यू टाइप है

यह एक लौवलु को वापस नहीं लौटा सकता क्योंकि उसे y के प्रकार से मिलान करने के लिए x के प्रकार को बढ़ावा देना होगा (क्योंकि दोनों पक्ष : एक ही प्रकार के नहीं हैं), और इसके साथ ही उसे अस्थायी रूप से तैयार करना होगा।


मानक क्या कहते हैं? ( n1905 )

अभिव्यक्ति 5.17 असाइनमेंट और परिसर असाइनमेंट ऑपरेटर्स

5.17 / 3

यदि दूसरे और तीसरे ऑपरैण्ड में अलग-अलग प्रकार के होते हैं, और या तो (संभवत: सीवी-योग्य) वर्ग के प्रकार हैं, तो उन प्रत्येक ऑपरेंड को दूसरे प्रकार के प्रकार के रूप में परिवर्तित करने का प्रयास किया जाता है यह निर्धारित करने की प्रक्रिया है कि टाइप 1 के प्रकार के ऑपरेटर अभिव्यक्ति E1 को एक प्रकार के ऑपरेटर एक्सप्रेशन से मिलान करने के लिए परिवर्तित किया जा सकता है, प्रकार 2 के 2 प्रकार को परिभाषित किया गया है:

– यदि ई 2 एक लार्वेल है: ई 1 को ई 2 से मिलान करने के लिए परिवर्तित किया जा सकता है, यदि ई 1 को पूर्ण रूप से (खंड 4) प्रकार "संदर्भित करने के लिए टी 2" के रूप में परिवर्तित किया जा सकता है, तो बाधा के अधीन है कि रूपांतरण में संदर्भ सीधे बाध्य होना चाहिए (8.5.3 ) ई 1 से

– यदि ई 2 एक रैवल्यू है, या यदि ऊपर रूपांतरण नहीं किया जा सकता है:

– यदि ई 1 और ई 2 का वर्ग प्रकार है, और अंतर्निहित वर्ग प्रकार समान हैं या एक दूसरे का आधार वर्ग है: E1 को ई 2 से मेल करने के लिए परिवर्तित किया जा सकता है यदि टी 2 का वर्ग समान प्रकार है या आधार वर्ग , टी 1 की श्रेणी, और टी 2 के सीवी-योग्यता एक ही सीवी-योग्यता है, या टी 1 की सीवी-योग्यता की तुलना में अधिक सीवी-योग्यता है। यदि रूपांतरण लागू किया गया है, तो ई 1 को टाइप टी 2 की एक रेंज में बदल दिया गया है जो अभी भी मूल स्रोत वर्ग ऑब्जेक्ट (या उसके उपबब्ब के उपयुक्त) को संदर्भित करता है। [ नोट: यह है, कोई प्रतिलिपि नहीं बनाई गई है – अंत नोट ] एक अस्थायी प्रकार की प्रतिलिपि- E2 से टी 2 को शुरू करने और उस अस्थायी रूप से परिवर्तित परिचालित के रूप में उपयोग करके।

अन्यथा (यानी, यदि E1 या ई 2 में एक गैर वर्ग प्रकार है, या यदि दोनों में क्लास प्रकार हैं लेकिन अंतर्निहित वर्ग या तो एक या दूसरे के आधार वर्ग नहीं हैं): ई 1 को ई 2 से मेल करने के लिए परिवर्तित किया जा सकता है यदि ई 1 ई 3 को अभिव्यक्ति E2 के रूप में परिवर्तित किया जा सकता है, यदि E2 को एक रैवल्यू में परिवर्तित किया गया हो (या यह प्रकार है, यदि ई 2 एक रैवल्यू है)।

इस प्रक्रिया का उपयोग करना, यह निर्धारित किया जाता है कि दूसरे ऑपरेंड को तीसरे ऑपरेंड से मिलान करने के लिए परिवर्तित किया जा सकता है, और क्या तीसरे ऑपरेंड को दूसरे ऑपरेंड से मिलान करने के लिए परिवर्तित किया जा सकता है। यदि दोनों को रूपांतरित किया जा सकता है, या एक को परिवर्तित किया जा सकता है, लेकिन रूपांतरण अस्पष्ट है, तो प्रोग्राम खराब है यदि न तो परिवर्तित किया जा सकता है, तो ऑपरेंड अपरिवर्तित बचे हैं और नीचे की गई जांच के अनुसार और जांच की जाती है। यदि वास्तव में एक रूपांतरण संभव है, तो उस रूपांतरण को चुने हुए ऑपरेंड पर लागू किया जाता है और कनवर्ट ऑरेंडेंड का उपयोग इस अनुभाग के शेष भाग के लिए किया जाता है।


5.17 / 4

यदि दूसरे और तीसरे ऑपरेंल्स् में समानताएं हैं और समान प्रकार हैं, तो इसका परिणाम उस प्रकार का है और एक लावल्यू है और यह थोड़ा-सा क्षेत्र है यदि दूसरा या तीसरा ऑपरेंड बिट-फ़ील्ड है, या यदि दोनों बिट- खेत।


5.17 / 5

अन्यथा, इसका परिणाम एक मूल्य है। यदि दूसरे और तीसरे ऑपरेंडों में एक ही प्रकार का नहीं है, और (संभवतः सीवी-योग्य) कक्षा प्रकार है, ओवरलोड संकल्प ऑपरेटरों (13.3.1.2, 13.6) पर लागू होने वाले रूपांतरणों (यदि कोई हो) निर्धारित करने के लिए उपयोग किया जाता है, । अगर ओवरलोड संकल्प विफल हो जाता है, तो कार्यक्रम का खराब स्वरूप है। अन्यथा, इस प्रकार निर्धारित किए गए रूपांतरण लागू होते हैं, और इस खंड के शेष के लिए मूल ऑपरेंड्स के स्थान पर रूपांतरित ऑपेंड का उपयोग किया जाता है।