2012-12-02 12 views
8

संभव डुप्लिकेट:
Unnamed/anonymous namespaces vs. static functionsस्टेटिक और अनाम नाम स्थान

यह पूरी तरह से बेमानी है, या यह करने के लिए एक कारण हो सकता है?

namespace { 
    static void f() { 
    ... 
    } 
} 
+4

इसे देखें, यह सब उत्तर देता है: [अनाम/अनाम नामस्थान बनाम।स्थिर कार्य] [1] [1]: http://stackoverflow.com/questions/154469/unnamed-anonymous-namespaces-vs-static-functions – pbhd

+0

@phbd वहां एक टिप्पणी है जिसमें कहा गया है कि नामित नामस्थान अभी भी प्राप्त हैं बाहरी जुड़ाव क्या आप जानते हैं/क्या आप इसका अर्थ समझ सकते हैं? – baruch

+0

@baruch: मेरा उत्तर देखें - क्योंकि मानक से उद्धरण स्पष्ट करता है, इसका मतलब है कि उस टिप्पणी को करने वाले व्यक्ति को गलत माना गया था। –

उत्तर

3

यह मेरे लिए अनावश्यक दिखता है - या तो स्थैतिक घोषित किया जा रहा है या अज्ञात नेमस्पेस में होने का मतलब है कि इसमें आंतरिक संबंध है।

§3.5/3:

एक नाम होने नाम स्थान गुंजाइश (3.3.6) आंतरिक संबंध है, तो उसका नाम है:
- एक चर, समारोह या समारोह टेम्पलेट है कि स्पष्ट रूप से स्थिर घोषित ;

§3.5/4:

[...] एक अनाम नाम स्थान या एक नाम स्थान एक अनाम नाम स्थान के भीतर प्रत्यक्ष या परोक्ष रूप घोषित आंतरिक संबंध है। [...] नामस्थान स्कोप वाला नाम जिसमें नहीं है, ऊपर दिए गए आंतरिक लिंक को संलग्न नामस्थान के समान लिंक है, यदि यह
- एक चर का नाम है; या
- एक समारोह; या

तो, जैसा कि अभी है, इसमें आंतरिक संबंध है क्योंकि इसे स्पष्ट रूप से स्थिर घोषित किया गया है। यदि इसे स्पष्ट रूप से स्थिर घोषित नहीं किया गया था, तो इसमें आंतरिक संबंध होगा क्योंकि इसे एक अनाम नामस्थान के अंदर घोषित किया गया है। किसी भी तरह से वही प्रभाव।

ध्यान दें कि यहां मैं विशेष रूप से एक फ़ंक्शन के बारे में उत्तर दे रहा हूं - कुछ अस्पष्ट मामले हैं जहां आप किसी प्रकार के नाम से निपट रहे हैं (उदाहरण के लिए, कक्षा/संरचना/संघ), लेकिन मुझे ऐसी किसी भी चीज़ की जानकारी नहीं है जो किसी फ़ंक्शन के मामले में लागू होती है।

जहां तक ​​आंतरिक संबंध वास्तव में है, यह उन स्थानों में से एक है जहां मानक वास्तव में काफी प्रत्यक्ष और स्पष्ट है।

  1. एक नाम बाहरी लिंकेज होता है तो इकाई यह दर्शाता है अन्य अनुवाद इकाइयों या के दायरे से नामों से जाना जाता जा सकता है: यह शायद सभी तीन संभावनाएं (§3.5/2) की परिभाषा उद्धृत करने के लिए सबसे अच्छा है एक ही अनुवाद इकाई के अन्य क्षेत्रों से।
  2. जब किसी नाम में आंतरिक लिंक है, तो जिस इकाई को इंगित किया गया है उसे उसी अनुवाद इकाई में अन्य स्कॉप्स के नामों से संदर्भित किया जा सकता है।
  3. जब कोई नाम कोई लिंक नहीं है, तो जिस इकाई को इंगित किया गया है उसे अन्य स्कॉप्स के नामों से संदर्भित नहीं किया जा सकता है।

ध्यान दें कि उपरोक्त इटालिक्स मानक में उनसे मेल खाता है, जो यह कहने का तरीका है कि ये वाक्य परिभाषित करते हैं कि शेष वाक्यांशों के बाकी हिस्सों में क्या वाक्यांश है।

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