मैं static
कीवर्ड का उपयोग आंतरिक संबंध को परिभाषित करने के लिए लंबे समय से कर रहा हूं। बाद में, मैंने अज्ञात नेमस्पेस में स्थानीय चीजों को लपेटने की सी ++ शैली में स्विच किया।बेनामी नामस्थान: क्या वे वास्तव में महान हैं?
हालांकि, अब जब मैंने कुछ वर्षों तक अनाम नामस्थानों के साथ काम किया है, तो मुझे लगता है कि static
कीवर्ड के साथ काम करना बहुत आसान है!
एक आम समस्या यह है कि मैं इस पद्धति है: एक निश्चित समारोह आंतरिक या बाह्य संबंध है यदि
namespace {
// ...five pages of code...
} // namespace
देखने के लिए, मैं अब, एक बहुत स्क्रॉल करना पड़ता है के रूप में पुराने सी शैली के लिए विरोध किया, जहां मैं यह जांच सकता है कि फ़ंक्शन/ऑब्जेक्ट के सामने static
था या नहीं।
मुझे पता है कि अज्ञात नामस्थान ऐसी चीजें हैं जो static
टाइप नहीं कर सकते हैं - लेकिन व्यक्तिगत रूप से मैं वास्तव में उसमें बहुत दिलचस्पी नहीं लेता हूं।
इस पर आपका क्या लेना है? अज्ञात नामस्थानों की जीत इतनी महान है कि यह कम पठनीयता की गारंटी देता है? या मैं सब गलत हूँ?
नामस्थान क्षेत्र में 'स्थिर' फ़ंक्शंस को बहिष्कृत कर दिया गया है, इसका उपयोग करने के लिए पर्याप्त कारण नहीं है। एनन नेमस्पेस में फ़ंक्शंस में 'स्थिर' के सभी फायदे हैं, सिवाय इसके कि उनके पास बाहरी संबंध है। उत्तरार्द्ध मुझे लगता है कि पहले से ही कंपाइलर्स का ख्याल रखा गया है, निर्यात किए गए सेक्शन नाम से अज्ञात नेमस्पेस में परिभाषित नाम हटा रहा है। –
@ जीन वास्तव में, स्थिर कार्यों को कभी बहिष्कृत नहीं किया गया था। बहिष्करण केवल * वस्तुओं * के खिलाफ था। हालांकि, एन 3225 में बहिष्करण हटा दिया गया था: सी ++ 0x में ऑब्जेक्ट देने या आंतरिक संबंधों को कार्य करने के लिए इसका उपयोग करने के लिए अब इसे बहिष्कृत नहीं किया गया है। एक और अंतर गिर गया है कि अनाम नामस्थान बाहरी संबंध बनाए रखेंगे: अनाम नाम और उनकी सामग्री को C++ 0x में आंतरिक संबंध मिलेगा। इसलिए स्थिर-मार्ग और नामस्थान-मार्ग के बीच अब कोई अंतर नहीं दिखता है, नामस्थान-मार्ग को छोड़कर 'नेमस्पेस {int a; } int ए; '। –
@ जोहान्स: सी ++ 0x आंतरिक लिंकेज के साथ टेम्पलेट पैरामीटर की अनुमति देता है, या यह एक महान महान तोड़ने वाला परिवर्तन है? –