Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में नेमस्पेस

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

यही स्थिति आपके C++ एप्लिकेशन्स में उत्पन्न हो सकती है। उदाहरण के लिए, आप कुछ कोड लिख रहे होंगे जिसमें xyz() नामक एक फ़ंक्शन है और एक और लाइब्रेरी उपलब्ध है जिसमें xyz() नामक वही फ़ंक्शन है। अब कंपाइलर के पास यह जानने का कोई तरीका नहीं है कि आपके कोड के भीतर आप xyz() फ़ंक्शन के किस संस्करण का उल्लेख कर रहे हैं।

एक नेमस्पेस को इस कठिनाई को दूर करने के लिए डिज़ाइन किया गया है और इसका उपयोग समान नाम वाले समान फ़ंक्शन्स, क्लासेस, वेरिएबल्स आदि को अलग-अलग लाइब्रेरी में उपलब्ध कराने के लिए अतिरिक्त जानकारी के रूप में किया जाता है। नेमस्पेस का उपयोग करके, आप वह संदर्भ परिभाषित कर सकते हैं जिसमें नाम परिभाषित हैं। संक्षेप में, एक नेमस्पेस एक स्कोप को परिभाषित करता है।

नेमस्पेस परिभाषित करना

एक नेमस्पेस परिभाषा कीवर्ड namespace के बाद नेमस्पेस नाम के साथ शुरू होती है:

namespace namespace_name {
    // कोड डिक्लेरेशन्स
}

नेमस्पेस-सक्षम फ़ंक्शन या वेरिएबल के संस्करण को कॉल करने के लिए, नेमस्पेस नाम को प्रीपेंड करें (::):

name::code; // code वेरिएबल या फ़ंक्शन हो सकता है

उदाहरण

#include <iostream>
using namespace std;

// पहला नेमस्पेस
namespace first_space {
    void func() {
        cout << "first_space के अंदर" << endl;
    }
}

// दूसरा नेमस्पेस
namespace second_space {
    void func() {
        cout << "second_space के अंदर" << endl;
    }
}

int main() {
    // पहले नेमस्पेस से फ़ंक्शन कॉल करता है
    first_space::func();
    // दूसरे नेमस्पेस से फ़ंक्शन कॉल करता है
    second_space::func();
    return 0;
}

आउटपुट

first_space के अंदर
second_space के अंदर

नेमस्पेस के प्रकार और उपयोग

1. नेम्ड नेमस्पेस

namespace MyProject {
    namespace Utils {
        void helper() { }
    }
    class MyClass { };
}

// उपयोग
MyProject::Utils::helper();
MyProject::MyClass obj;

2. अनाम/अनाम नेमस्पेस

namespace {
    int file_local_var = 10; // केवल इस .cpp फ़ाइल में विजिबल
    void internal_helper() { }
}
// static ग्लोबल्स के बराबर

3. इंलाइन नेमस्पेस (C++11)

namespace Library {
    inline namespace v1 {
        void func() { cout << "v1"; }
    }
    namespace v2 {
        void func() { cout << "v2"; }
    }
}
// Library::func() v1 को कॉल करता है

4. नेमस्पेस एलियास

namespace VeryLongNamespaceName {
    void doSomething();
}

namespace VLN = VeryLongNamespaceName; // छोटा नाम
VLN::doSomething();

using डायरेक्टिव्स

डायरेक्टिव प्रभाव सिफारिश
using namespace ns; ns के सभी नाम वर्तमान स्कोप में लाता है केवल .cpp फ़ाइल्स में, हेडर में नहीं
using ns::name; केवल विशिष्ट नाम लाता है सुरक्षित, प्रीफर्ड
using std::cout; केवल cout लाता है अच्छी प्रैक्टिस

मानक नेमस्पेस

  • std - C++ स्टैंडर्ड लाइब्रेरी
  • std::chrono, std::filesystem, आदि - सबनेमस्पेस
  • __gnu_cxx - GCC एक्सटेंशन्स

सर्वोत्तम अभ्यास

  1. हेडर फ़ाइल्स में using namespace std; न करें - नेमस्पेस पॉल्यूशन का कारण बनता है
  2. हेडर्स में पूरी तरह से क्वालिफाइड नाम उपयोग करें (std::vector)
  3. संबंधित कोड को ग्रुप करने के लिए नेमस्पेस का उपयोग करें
  4. ग्लोबल नेमस्पेस को प्रदूषित करने से बचें
  5. वर्जनिंग के लिए इंलाइन नेमस्पेस पर विचार करें
  1. - C++ में 'using namespace std' का क्या अर्थ है?

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

  1. - PHP नेम रिज़ॉल्यूशन नियम: नाम कैसे रिज़ॉल्व होते हैं

    परिचय PHP कोड में नेमस्पेस की उपस्थिति निम्नलिखित नियमों के अधीन रिज़ॉल्व होती है: नेमस्पेस सेपरेटर सिंबल (\) के बिना एक नेमस्पेस पहचानकर्ता का अर्थ है कि यह वर्तमान नेमस्पेस को संदर्भित कर रहा है। यह एक अनक्वालिफाइड नाम है। यदि इसमें सेपरेटर सिंबल है जैसे myspace\space1, तो यह myspace के तहत सबन

  1. - PHP नेमस्पेस अवलोकन: नाम संघर्ष से बचाव

    परिचय PHP में, नेमस्पेस के उपयोग से समान नाम वाली क्लासेज/फंक्शन्स/कॉन्स्टेंट्स को विभिन्न संदर्भों में बिना किसी संघर्ष के उपयोग किया जा सकता है, जिससे इन आइटम्स को एनकैप्सुलेट किया जाता है। एक नेमस्पेस क्लासेज/फंक्शन्स आदि का तार्किक समूह है जो उनकी प्रासंगिकता पर निर्भर करता है। जैसे एक ही नाम क