मैं इंटरनेट पर बहुत से पढ़ रहा हूं और ऐसा लगता है कि कई लोगों ने निम्नलिखित नियमों का उल्लेख किया है (लेकिन मुझे इसे मानक में नहीं मिला),लैवल्यू-टू-रावल्यू रूपांतरण के संबंध में, इसकी आवश्यकता कब होती है?
अतिरिक्त ऑपरेटर + (और अन्य सभी बाइनरी ऑपरेटरों) दोनों ऑपरेटरों को रैवल्यू होने की आवश्यकता होती है, और परिणाम रैवल्यू होता है। और इसी तरह ..
मैं सी ++ मानक जाँच की, और यह स्पष्ट रूप से कहा गया है कि (खंड 3.10/2),
जब भी कोई glvalue एक प्रसंग में दिखाई देता है, जहां एक prvalue की उम्मीद है, glvalue एक prvalue
(खंड 5/9) में बदल जाती है,
जब भी कोई glvalue अभिव्यक्ति प्रकट होता है एक ऑपरेटर के एक संकार्य कि कि संकार्य के लिए एक prvalue उम्मीद के रूप में, lvalue करने वाली rvalue (4.1), सरणी-टू-सूचक (4.2), या समारोह करने के लिए सूचक (4.3) मानक रूपांतरण अभिव्यक्ति को एक प्रसार के रूप में परिवर्तित करने के लिए लागू होते हैं।
यह एक शब्द का उपयोग करता है जो ऑपरेंड "अपेक्षा" करता है। हालांकि, जब मैं अतिरिक्त ऑपरेटर, गुणा ऑपरेटर इत्यादि को देखता हूं, तो यह केवल उल्लेख करता है कि परिणाम एक प्रबल है, लेकिन यह कुछ भी नहीं कहता है कि ऑपरेंड "अपेक्षित" होने के बारे में कुछ भी नहीं कहता है।
चाहे द्विआधारी ऑपरेटर वास्तव में उम्मीद ऑपरेंड होने की prvalue निम्नलिखित मामले में एक फर्क नहीं पड़ता है,
int b = 2;
int a = b + 1;
ख एक prvalue होने की उम्मीद है, तो उसके लिए lvalue करने वाली rvalue रूपांतरण होगा यहां, और फिर यह प्रावधान + प्रसार करेगा और एक प्रावधान वापस करेगा, और परिणाम प्रकोप एक lvalue ए को सौंपा गया है।
हालांकि, यदि बी को एक प्रवाल होने की आवश्यकता नहीं है, तो यह lvalue + prvalue होगा और परिणाम एक प्रकोप होगा।
मैं वास्तव में जानना चाहता हूं कि मानक स्पष्ट रूप से या स्पष्ट रूप से कहता है कि विभिन्न ऑपरेटरों के लिए नियम कहां है? मैं सभी ऑपरेटरों सेक्शन और केवल कुछ ऑपरेटरों की जांच करता हूं कि मानक स्पष्ट रूप से उल्लेख करते हैं कि ऑपरेंड और परिणाम लैवल्यू या रावल्यू होंगे या नहीं। अधिकांश ऑपरेटरों के लिए, मानक केवल परिणाम का उल्लेख करता है लेकिन ऑपरेंड आवश्यकता नहीं।
धन्यवाद।
Btw, मैं स्टैंडर्ड 5.19 निरंतर अभिव्यक्ति के बारे में में पाया हो सकता है बहुत बहुत "परोक्ष" मतलब है कि द्विआधारी ऑपरेटर ऑपरेंड पर lvalue करने वाली rvalue रूपांतरण की आवश्यकता है। अधिक जानकारी के लिए, अपने पिछले प्रश्न का संदर्भ लें
mixing use of constexpr and const?
सशर्त अभिव्यक्ति एक निरंतर अभिव्यक्ति है जब तक कि यह में से एक एक संभावित का मूल्यांकन उपसूचक (3.2) के रूप में निम्नलिखित शामिल है।
...
- एक lvalue करने वाली rvalue रूपांतरण (4.1) जब तक यह
---- अभिन्न या गणन प्रकार का एक glvalue लिए आवेदन किया है कि एक गैर को संदर्भित करता है वाष्पशील स्थिरांक वस्तु एक पूर्ववर्ती प्रारंभ के साथ, एक निरंतर अभिव्यक्ति के साथ प्रारंभ
पढ़ने के लिए धन्यवाद।
धन्यवाद। हालांकि, आपके द्वारा उद्धृत उपरोक्त बयान नए मानक N3225 में हटा दिए गए थे ... कोई आश्चर्य नहीं कि मुझे यह नहीं मिला .. मुझे लगता है कि यह अलग-अलग हिस्सों से निपटने वाले विभिन्न लोगों की समस्या है और स्थिरता के मुद्दों पर बहुत कुछ नहीं सोचा । – user534498