Saturday 15 September 2012

c++ - decltype and const reference return types for strings -


एक डेटा सदस्य, _value, को एक वर्ग में, इस प्रकार परिभाषित किया गया है:

  unique_ptr & lt; std :: स्ट्रिंग & gt; _value = nullptr;  

निम्न संकलन नहीं करता है।

  स्वतः मिलना () const - & gt; Const decltype (* _ मान) & amp;  

संकलक यह त्रुटि देता है:

'const' क्वालिफायर को 'std :: basic_string & amp;' पर लागू नहीं किया जा सकता

< P> हालांकि यदि मैं इस तरह से समारोह घोषित करता हूं:

  स्वत: getValue () const - & gt; Const remove_reference & lt; decltype (* _ value) & gt; :: टाइप & amp;;  

यह संकलित और व्यवहार करता है जैसा कि मैं चाहता हूँ (यानी मूल रूप से एक const स्ट्रिंग देता है);

मुझे यह अजीब लगता है क्या यह जीसीसी कम्पाइलर में एक बग हो सकता है या क्या दो घोषणाओं के बीच कुछ बुनियादी अंतर है?

डेल्टाइप (* _ वैल्यू) सही तरीके से मूल_स्ट्राइंग के लिए मूल्यांकन करता है & amp; जो मिल गया है, इसलिए मैंने सोचा कि मैं सिर्फ इसके सामने एक कंस्ट्रक्ट को छू सकता हूं और इसे ढूंढना चाहिए, लेकिन संकलक को भ्रमित करने लगता है ...

ध्यान दें कि मेरा इरादा मूल रूप से एक कंसोल

ऐसा लगता है कि यह में तय हो गया था। जीसीसी 5.0 जो हम ऑनलाइन का परीक्षण कर सकते हैं लेकिन टीसी के रूप में नोट C ++ 11 मानक <कोड> 8.3.2 :

से संदर्भ के लिए लागू होने पर नोट्स को नजरअंदाज कर दिया जाता है, सीवी-योग्य संदर्भ केवल जब तक सीवी-क्वालिफायर एक टाइप-फेफ-नाम (7.1.3, 14.1) या डेल्प्टीप-स्पेसिफायर (7.1.6.2) के उपयोग के माध्यम से पेश किया जाता है, इस स्थिति में सीवी-क्वालिफायर को अनदेखा कर दिया जाता है।


No comments:

Post a Comment