नोट: इस सवाल के बारे में है name space
, नहीं namespace
।
C ++ मानक के कुछ संदर्भ हैं name space
, लेकिन मुझे इसकी परिभाषा दिखाई नहीं देती है। मानकों का कहना है कि लेबल और मैक्रो विभिन्न नाम रिक्त स्थान में हैं। अन्य सभी संदर्भ name space
C / C ++ संगतता अनुभाग में हैं, जैसे कि ( वर्तमान ड्राफ्ट ):
यह C और C ++ के बीच की कुछ असंगतताओं में से एक है, जिसे नए C ++ नाम के स्थान की परिभाषा के लिए जिम्मेदार ठहराया जा सकता है, जहां एक नाम को एक प्रकार के रूप में और एक गैर-प्रकार में एक गैर-प्रकार के रूप में घोषित किया जा सकता है, जो गैर-प्रकार के नाम को छिपाने का कारण बनता है। प्रकार और नाम की आवश्यकता है कि कीवर्ड क्लास, स्ट्रक्चर, यूनियन या एनम का उपयोग टाइप नाम को संदर्भित करने के लिए किया जाए। यह नया नाम स्पेस डेफ़िनेशन C ++ प्रोग्रामर्स के लिए महत्वपूर्ण नोटिफ़िकेशंस प्रदान करता है और यूज़र-डिफ़ाइंड प्रकारों को मौलिक प्रकारों के उपयोग के लिए संभव बनाने में मदद करता है।
यह नया नाम अंतरिक्ष परिभाषा क्या है ? मैं इसे मानक में कहां पा सकता हूं? सटीक नियम क्या हैं? "गैर-प्रकार के छिपाने के प्रकार" की तुलना में नियम अधिक जटिल लगते हैं। जैसे, यह संकलन नहीं करता है:
typedef int Foo; // Foo is a type
void Foo(); // not a type, but compile error, instead of hiding
लेकिन यह करता है:
struct Foo { }; // Foo is a type as well
void Foo(); // This hides the type Foo. "struct Foo" refers to the type
और यह या तो संकलन नहीं है:
struct Foo { }; // Type
namespace Foo { } // Non-type, but compiler error instead of hiding
[stmt.label]/1
और एक मैक्रोज़ के लिए [cpp]/8
।