सहकर्मी का दावा है कि उन कोलन someObject स्पष्ट रूप से वैश्विक बनाने के लिए और इस तरह एक संभव स्थानीय someObject के साथ भ्रम को रोकने के।
हां - इसका मतलब है कि फ़ंक्शन हो सकता है, और केवल वैश्विक नामस्थान में मिलान किया जाना चाहिए। यह स्पष्ट करता है कि आप एक वैश्विक से निपट रहे हैं, और कुछ स्थानीय (बीट फ़ंक्शन लोकल, ऑब्जेक्ट सदस्य, नेमस्पेस सदस्य, आपके द्वारा उपयोग किए जा रहे नामस्थान में, कोएनिग लुकअप मैच इत्यादि) के खिलाफ आकस्मिक मिलान को रोक देगा।
मुझे लगता है कि होता है कि आप स्थानीय रूप से someObject परिभाषित करने में सक्षम नहीं हो सकता है अगर यह पहले से ही विश्व स्तर पर परिभाषित किया गया था?
यह एक त्रुटि बनाने के लिए एक बहुत बुरा विचार होगा। कहें प्रोग्रामर की एक टीम का फैसला है कि वे अपने नामस्थान में "last_error" नामक चर को जोड़ना चाहते हैं: यदि नामस्थान में मौजूदा फ़ंक्शंस स्थानीय चर के लिए समान नाम का उपयोग करते हैं तो उन्हें चिंता करने की ज़रूरत नहीं है। यदि आप किसी नामस्थान या कक्षा से दूसरे में किसी फ़ंक्शन की प्रतिलिपि बनाते हैं, तो आपको कार्यान्वयन में त्रुटि-प्रवण पहचानकर्ता प्रतिस्थापन नहीं करना चाहिए।
:: के लाभों के बारे में
, पर विचार करें:
namespace X
{
void fn() {
rip(data, bytes); // MP3 rip this data
}
}
... तो fn()
जरूरतों नाम स्थान को Y जल्दी से स्थानांतरित करने की ...
namespace Y
{
void rip(const char* message, int exit_code); /* for fatal errors */
...
}
... एक आकस्मिक copy- वाई के गले में पेस्ट आसानी से अनदेखा कर सकता है कि लॉग उसी वैश्विक फ़ंक्शन से मेल नहीं खाएगा जब यह नामस्थान एक्स में था, लेकिन - जैसा कि सचित्र - कार्यक्षमता स्पष्ट रूप से भिन्न हो सकती है :-)।
आप प्रत्येक नामस्थान, वर्ग/संरचना और पेड़ बनाने वाले कार्यों के बारे में सोच सकते हैं, जहां प्रत्येक स्तर को विशिष्ट रूप से कुंजी (यानी समान नामस्थान में समान नामित कक्षाएं) नहीं होनी चाहिए, लेकिन निर्णायक हमेशा एक दूसरे से स्वतंत्र होते हैं और उनके पूर्वजों। कई लोगों को एक बड़ी समस्या पर एक साथ काम करने के लिए स्वतंत्र रूप से भिन्न होने की स्वतंत्रता बढ़ाना आवश्यक है।
आप कुछ प्रकाश क्या पर उन कोलन मतलब है और वे आवश्यक हैं या नहीं डाला सकता है?
इस विशिष्ट उपयोग में, :: शायद सख्ती से जरूरी नहीं है। यह थोड़ा संरक्षण जोड़ता है, लेकिन बाद में वैरिएबल को एक और स्थानीय दायरे में स्थानांतरित करना कठिन बनाता है - हालांकि यह इतना महत्वपूर्ण नहीं है क्योंकि संकलक आपको उन स्थानों के बारे में बताएगा जो x के बाद x को स्थानांतरित कर रहे हैं।
मैं हमेशा ग्लोबल्स वर्रों पर जोर देता हूं। यहां तक कि यदि एक ही नाम के साथ स्थानीय वार्स निषिद्ध थे। बी/सी ग्लोबल्स ** ईविल ** –
'::' का उपयोग वैश्विक चर तक ही सीमित नहीं है; यह वैश्विक कुछ भी संदर्भित करता है। इसलिए, यदि आपके पास विरासत 'स्ट्रिंग' क्लास है, तो इसे ':: स्ट्रिंग' के रूप में संदर्भित करने के लिए सलाह दी जाती है और इसलिए' std :: string' के साथ भ्रम को रोकें। – MSalters
@MSalters: b.t.w. क्या होगा यदि मैं 'नेमस्पेस std' का उपयोग करके टाइप करूंगा और फिर' :: स्ट्रिंग स्ट्र 'टाइप करूं? 'Str' का प्रकार क्या होगा? –