वहाँ वास्तव में दो कारण शाब्दिक नामस्थान में डाल दिया जाता है:
- यह अवांछनीय है कि उपयोगकर्ताओं को
using namespace std;
का उपयोग सिर्फ इसी शाब्दिक की पकड़ पाने के लिए होगा माना जाता है। इनमें से विशिष्ट नामस्थानों में घोषित शाब्दिक होने से समस्या का कारण नहीं बनता है।
- डोमेन के आधार पर
s
का उपयोग किसी और चीज के लिए प्रत्यय के रूप में करना वांछनीय हो सकता है। सेकेंड के लिए पहले से ही एक और प्रत्यय s
है लेकिन वे वास्तव में संघर्ष नहीं करते हैं।
video of STL's CppCon 2014 talk में (एक टिप्पणी में remyable द्वारा पोस्ट की गई) स्टीफ़न टी Lavavej सी ++ 14 और उसके बहुत स्पष्ट में शाब्दिक के समग्र डिजाइन बताते हैं कि वे नहीं ग्लोबल नेम स्पेस में होना चाहिए रहे हैं ! इसके बजाए, मानक पुस्तकालय में शाब्दिक प्रत्यय inline
नामस्थानों के पदानुक्रम में रहते हैं जो उपयोगकर्ताओं को उपलब्ध कराए जा रहे साक्षरियों पर सुदृढ़ नियंत्रण प्रदान करते हैं। उदाहरण के लिए, तार के लिए शाब्दिक प्रत्यय इस तरह घोषित किया जाता है (21.3 [string.classes] पैराग्राफ 1):
namespace std {
inline namespace literals {
inline namespace string_literals {
string operator"" s(char const* str, size_t len);
}
}
}
inline
नामस्थान के इस पदानुक्रम यह संभव उपयोगकर्ताओं शाब्दिक प्रत्यय उपयुक्त विकल्प पाने के लिए बनाता है:
using namespace std;
- आपको बिना किसी योग्यता के शाब्दिक प्रत्यय समेत मानक सी ++ लाइब्रेरी में सबकुछ मिलता है।
using namespace std::literals;
- आपको मानक सी ++ लाइब्रेरी में परिभाषित सभी शाब्दिक प्रत्यय प्राप्त होते हैं।
using namespace std::string_literals;
- आपको स्ट्रिंग पर लागू सभी शाब्दिक प्रत्यय मिलते हैं।
using namespace std::literals::string_literals;
- हाँ, आप ऐसा कर सकते हैं लेकिन आपको वास्तव में यह नहीं करना चाहिए: यह using namespace std::string_literals;
के बराबर है।
जाहिर है, समिति, कि बहुत प्रयास करने के लिए नहीं गए हैं अगर यह विचार सिर्फ शाब्दिक प्रत्यय के साथ वैश्विक नामस्थान को दूषित करने के लिए व्यवहार्य माना जाता था, हालांकि वे भी किसी भी उपयोगकर्ता शाब्दिक प्रत्यय के साथ संघर्ष नहीं कर सकते।
स्रोत
2014-12-18 22:09:07
ओह मैन ... मुझे इसके बारे में एक बात देखना याद है, या तो सीपीपीकॉन या बूस्टकॉन, लेकिन मुझे याद नहीं है कि यह क्यों था। – Borgleader
जबकि मुझे सही कारण पता नहीं है, तो ऐसा लगता है कि वैश्विक नामस्थान को प्रदूषित करने से बचने के लिए उचित लगता है, जो इतना छोटा प्रत्यय है। – Aleph
@ बॉर्गलीडर https://www.youtube.com/watch?v=dTeKf5Oek2c यह वीडियो की शुरुआत में है। –