2008-09-16 20 views

उत्तर

54

इसका मतलब वैश्विक क्षेत्र है। जब आप एक ही दायरे में विवादित कार्य या चर होते हैं तो आपको इस ऑपरेटर का उपयोग करने की आवश्यकता हो सकती है और आपको वैश्विक उपयोग करने की आवश्यकता होती है।

void bar(); // this is a global function 

class foo { 
    void some_func() { ::bar(); } // this function is calling the global bar() and not the class version 
    void bar();      // this is a class member 
}; 

आप एक वर्ग के सदस्य समारोह के भीतर से वैश्विक बार() फ़ंक्शन कॉल करने के लिए की जरूरत है बार() फ़ंक्शन के वैश्विक संस्करण को पाने के लिए, आप का उपयोग करना चाहिए ::: आप की तरह कुछ हो सकता है।

+2

यह संकलित क्यों नहीं करेगा? –

+1

[निश्चित रूप से यह संकलित लगता है] (http://ideone.com/tUVXrb) –

+0

यहां जोड़ने की आवश्यकता है कि आप जो अनाम नामस्थान में परिभाषित करते हैं उसे यूनरी स्कोप ऑपरेटर का उपयोग करके भी बुलाया जा सकता है: – DrumM

1

वैश्विक क्षेत्र

+4

-1: बहुत आलसी आलसी! –

2

की चर्चा करते हुए आप पहले से ही अपने स्थानीय क्षेत्र में एक समारोह के नाम पर रखा गया foo() है, लेकिन आप वैश्विक क्षेत्र में एक का उपयोग करने की जरूरत है: उदाहरण के लिए।

1

मेरा सी ++ जंगली है लेकिन मुझे विश्वास है कि यदि आपके पास स्थानीय क्षेत्र में फू() और एक वैश्विक दायरे में एक फ़ंक्शन घोषित किया गया है, तो foo() स्थानीय को संदर्भित करता है। :: foo() वैश्विक को संदर्भित करेगा।

4

आपको यह भी ध्यान रखना चाहिए कि नाम संकल्प ओवरलोड रिज़ॉल्यूशन से पहले होता है। तो यदि आपके वर्तमान दायरे में एक ही नाम के साथ कुछ है तो यह अन्य नामों की तलाश करना बंद कर देगा और उनका उपयोग करने का प्रयास करेगा।

void bar() {}; 
class foo { 
    void bar(int) {}; 
    void foobar() { bar(); } // won't compile needs ::bar() 
    void foobar(int i) { bar(i); } // ok 
} 
4

एक ऐसा नाम है जो scope resolution operator (::) के साथ शुरू होता ग्लोबल नेम स्पेस में देखा जाता है।

एक नाम एकल गुंजाइश ऑपरेटर :: लगाया जाता है (5.1) है: हम draft C++ standard अनुभाग 3.4.3योग्य नाम देखने पैरा जो कहते हैं (जोर मेरा) को देखकर यह देख सकते वैश्विक स्कोप में देखा गया, अनुवाद इकाई में जहां इसका उपयोग किया जाता है। नाम वैश्विक नामस्थान क्षेत्र में घोषित किया जाएगा या एक ऐसा नाम होगा जिसका उपयोग वैश्विक दायरे में उपयोग-निर्देश (3.4.3.2) के कारण दिखाई दे रहा है। :: का उपयोग वैश्विक नाम को संदर्भित करने की अनुमति देता है भले ही इसके पहचानकर्ता छिपा हुआ हो (3.3.10)।

int count = 0; 

int main(void) { 
    int count = 0; 
    ::count = 1; // set global count to 1 
    count = 2; // set local count to 2 
    return 0; 
} 

शब्दों N1804 है जो करने के लिए वापस जा रहा बहुत समान है:

मानक कहता है कि यह हमें वैश्विक नामस्थान that would otherwise be hidden से नामों का उपयोग करने की अनुमति देता है के रूप में, लिंक किए गए दस्तावेज़ से उदाहरण इस प्रकार है सबसे पुराना ड्राफ्ट मानक उपलब्ध है।

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