2012-08-27 19 views
22

मैं दो compilers पर परीक्षण किया है, और दोनों का समर्थन देखने के लिए परिभाषा बिना किसी शिकायत के निम्नलिखित आश्चर्य हुआ।संकलक द्वारा समर्थित अनावश्यक दायरे योग्यता क्यों हैं, और क्या यह कानूनी है? हालांकि यह जब घोषणा से अधिक योग्य है ध्वजांकित है</p> <pre><code>class A { A(); }; A::A::A() {} ^^^ </code></pre> <p>ध्यान दें कि यह भी तरीकों के लिए सफल होता है,:

सवाल:

  • यह एक वैध सी ++ प्रोग्राम है?
  • यदि हां, तो यह किस उद्देश्य से कार्य करता है - या यह केवल एक उपज है?

अपडेट किया गया विवरण:

मामले में मूल प्रश्न स्पष्ट या छोटा नहीं था: मैं उत्सुक हूँ क्यों बेमानी योग्यता परिभाषा (जोर भी ऊपर जोड़ा) पर अनुमति दी जाती है।


बजना एक एप्पल के जीसीसी 4.2 + LLVM compilers

+1

यह पूछा गया है, लेकिन मुझे लगता है कि कुछ लोगों की तुलना में यह एक कठिन डुप्ली है। – chris

+0

@ क्रिसिस मैंने कुछ पृष्ठों को देखा, लेकिन कुछ भी नहीं मिला - अगर डुप्लिकेट स्थित है तो बंद करने में खुशी होगी। शायद मैंने उचित शर्तों का उपयोग नहीं किया। – justin

+2

यह * हो सकता है * सहायता: http://stackoverflow.com/questions/11423380/why-are-redundant-class-name-qualifiers- – chris

उत्तर

18

हाँ, इसकी अनुमति है (§9/2) थे:

वर्ग नाम भी गुंजाइश में डाला जाता है कक्षा के ही; इसे इंजेक्शन-क्लास-नाम के रूप में जाना जाता है। पहुंच जांच के प्रयोजनों के लिए, इंजेक्शन-क्लास-नाम का इलाज इस तरह किया जाता है कि यह एक सार्वजनिक सदस्य नाम था।

क्लास नाम इंजेक्ट करने वाले तर्क के बारे में जानकारी के लिए, आप N0444 पढ़ना चाहेंगे।

+0

धन्यवाद (+1) - मैंने इस सवाल को संशोधित करने के लिए संशोधित किया है कि * परिभाषा * थी वह हिस्सा जो वास्तव में मेरे लिए उत्सुक था (और मुझे एहसास है कि आपका जवाब नहीं बदला जा सकता है)। – justin

संबंधित मुद्दे

 संबंधित मुद्दे