Exceptional C++[Bug]? -
मैं असाधारण सी ++ हर्ब सटर
पढ़ रहा हूं। वस्तु 32
तक पहुंचने पर मुझे निम्न पाया गया है
नाम स्थान A {struct X; Struct Y; शून्य एफ (इंट); शून्य जी (एक्स); } नाम स्थान बी {शून्य एफ (इंट आई) {एफ (आई); // जो एफ ()? }}
यह एफ () खुद को कॉल करता है, अनंत रिमार्सन के साथ। इसका कारण यह है कि एक ही दृश्यमान एफ () बी :: एफ () ही है।
हस्ताक्षर एफ (एएनटी) के साथ एक अन्य कार्य है, अर्थात् नाम स्थान ए में एक। अगर बी ने लिखा था <मजबूत > "नामस्थान ए का उपयोग कर"; या "ए :: एफ;" का उपयोग करते हुए, ए :: एफ (एएनटी) उम्मीदवार के रूप में दिखता है जब एफ (इंट) की तलाश होती है, और एफ (i) कॉल ए :: एफ (इंट) और बी :: एफ (इंट) के बीच में अस्पष्ट होता। चूंकि बी ने ए: एफ (एट) को दायरे में नहीं लाया था, फिर भी, केवल बी :: एफ (इंट) को माना जा सकता है, इसलिए कॉल बीबी :: एफ (आईएनए) को हल करता है।
लेकिन जब मैंने निम्नलिखित किया था ..
<पूर्व> नामस्थान ए {स्ट्रेट एक्स; Struct Y; शून्य एफ (इंट); शून्य जी (एक्स); } नामस्थान बी {नामस्थान ए का उपयोग कर; शून्य एफ (इंट आई) {एफ (आई); // कोई त्रुटि नहीं, क्यों? }}
इसका मतलब है कि हर्ब सटर को यह सब गलत है? यदि नहीं तो मुझे एक त्रुटि क्यों मिलती है?
उपयोग के घोषणा के बीच एक सूक्ष्म अंतर ( ए :: एफ का उपयोग करके और एक प्रयोग करने वाला डायरेक्टिव (
नामस्थान ए का उपयोग कर एक
)।
ए उपयोग घोषणा उस क्षेत्र में एक नाम प्रस्तुत करता है जिसमें यह प्रयोग किया जाता है < कोड> ए :: एफ कोड> का उपयोग करके f
को B :: f (int)
की परिभाषा में कॉल करता है। अस्पष्ट।
एक परिभाषा परिभाषित करता है कि डोमेन नाम के दायरे में उस दृश्य में दिखाई दे रहा है जिसमें इसका प्रयोग किया जाता है, लेकिन वे दिखाई देते हैं जैसे कि नाम नामों के सबसे निकटतम दायरे से आया है और नेमस्पेस जिसमें उपयोग डायरेक्टिव इस्तेमाल किया गया था। इसका अर्थ यह है कि नामस्थान ए का उपयोग कर;
इस मामले में अन्य f
प्रकट होता है जैसे कि इसे वैश्विक दायरे में घोषित किया गया था, लेकिन यह अभी भी B :: द्वारा छिपा हुआ है एफ (इंट)
।
(आईएसओ / आईईसी / बीएस 14882: 2003 7.3.4 [नामस्थान.उदीर] / 1 सभी मानक नशेड़ियों के लिए।)
Comments
Post a Comment