2010-01-12 13 views
24

मैं बूस्ट पुस्तकालयों का उपयोग कर रहे है, और Boost.Exception में, मैं निम्नलिखित की तरह कोड ध्यान दिया है:क्या एक अग्रणी "::" एक C++ विधि कॉल के उद्देश्य

#define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x) 

बस जिज्ञासा से बाहर: से पहले अग्रणी :: का उद्देश्य क्या है?

उत्तर

32

रूट नेमस्पेस को संदर्भित करने के लिए। यह अक्सर उपयोगी होता है यदि आपकी कक्षा या आप नामस्थान उस नाम का उपयोग करता है जो रूट में मौजूद है, लेकिन किसी बिंदु पर आप मूल संस्करण को संदर्भित करना चाहते हैं।

उदाहरण के लिए, अगर मैं अपने क्लास में new अतिभारित है, लेकिन डिफ़ॉल्ट (रूट) new का उल्लेख करने के कुछ बिंदु पर इच्छा, तो मैं ::new का उपयोग नए रूट का उल्लेख होगा।

23

यह इंगित करने के लिए कि यह एक शीर्ष स्तर का नाम स्थान है।

यह निर्देशिका नाम कैसे काम करता है यह बहुत समान (लेकिन समान नहीं) है। अग्रणी डबल-कोलन के बिना, सी ++ पहले जांच करेगा कि उस नाम का नामस्थान वर्तमान 'सक्रिय' नामस्थान में है या नहीं। यदि ऐसा नहीं है तो यह शीर्ष स्तर पर नाम के नामस्थान की जांच करेगा।

अग्रणी डबल-कोलन के साथ, सी ++ पहली जांच छोड़ देगा और केवल शीर्ष-स्तरीय नामस्थान की तलाश करेगा।

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