यह एक ही विषय पर मैंने लिखा एक और उत्तर का एक संशोधित संस्करण है। अब संस्करण 3 तक।
प्रमुख समस्या नाम विवाद है, यदि आपके पास आपके कोड में count
नामक एक चर है और आप using namespace std;
हैं तो यह आपके अर्थ के अनुसार अस्पष्ट होगा। यह सिर्फ count
नहीं है। reverse
और equal
भी शामिल किए जाएंगे, जो सभी आम पहचानकर्ता हैं। उदाहरण के लिए, इस एक संकलन त्रुटि में परिणाम होगा:
#include <algorithm>
using namespace std;
int count;
int main(int argc, char* argv[]){
count = 1;
}
संकलक करने के लिए सभी समस्याओं की अनदेखी, यह भी अपने कोड को पढ़ने के लिए आ रहा है किसी के लिए भी एक समस्या है। उन अतिरिक्त 5 अक्षर सुनिश्चित करना है कि अगले व्यक्ति हर दूसरे लाइन फ़ाइल के शीर्ष जाँच करने के लिए यदि आप std::string
या mylib::string
मतलब है जब आप string
बारे में यह भी देखने के लिए बिना अपने कोड knowns आप वास्तव में क्या मतलब है को बनाए रखने यह ध्यान देने योग्य है कि आपको कभी भी हेडर फ़ाइल में using namspace xyz
नहीं डालना चाहिए, क्योंकि यह उस हेडर फ़ाइल को शामिल करने वाली सभी फ़ाइलों को प्रचारित कर सकता है, भले ही वे उस नामस्थान का उपयोग नहीं करना चाहते हैं। यहां एक और समस्या यह है कि यह भी स्पष्ट नहीं है कि std नेमस्पेस आयात किया गया है, इसलिए रखरखाव (या आप 3 महीने के समय में) एक वैरिएबल को एक ही नाम के साथ जोड़ते हैं जैसे कुछ अस्पष्ट std फ़ंक्शन जिसे एक ही संकलन इकाई में शामिल किया गया था और फिर संकलन त्रुटि के कारण को खोजने का प्रयास करने में एक घंटे खर्च करता है।
मामलों के बहुमत में यह बहुत
using std::swap
उपयोग करने के लिए के रूप में अगर वहाँ स्वैप की एक विशेष संस्करण है, संकलक का उपयोग करेगा फायदेमंद है, (प्रभावी सी ++ से) अन्यथा इसे वापस std::swap
पर गिर जाएगी । यदि आप std::swap
पर कॉल करते हैं, तो आप हमेशा मूल संस्करण का उपयोग करते हैं, जो विशेष संस्करण को कॉल नहीं करेगा (भले ही यह मौजूद है)।
pimpl idiom का उपयोग कर उदाहरण कोड के लिए लें। जहां डिफ़ॉल्ट प्रतिलिपि वास्तविक कार्यान्वयन में सभी डेटा की प्रतिलिपि बना सकती है, जहां सभी को करने की आवश्यकता है, पॉइंटर्स को स्वैप करना है। एक विशेष स्वैप का उपयोग करने से बड़ी मात्रा में निष्पादन समय बचा सकता है, और अच्छी तरह से डिज़ाइन किए गए पुस्तकालयों को इसका विशेषज्ञ होना चाहिए।
सारांश में,
हमेशा using std::swap
प्रचार की वजह से हर हालत में एक शीर्षक में std::swap()
से अधिक
बचें using namespace std
पसंद करते हैं, कार्यान्वयन फ़ाइलों में इसका उपयोग करने से बचने की कोशिश।
प्रत्येक फ़ाइल के शीर्ष पर हजारों using std::foo
होने का कोई तरीका नहीं है। आमतौर पर कक्षाओं का उपयोग करने के लिए इसका उपयोग करें।
बाकी सब कुछ राय है।
http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-a-bad-practice-in-c कई अन्य लोगों के बीच डुप्पी। –
आप सही हैं! जब मैंने खोज की तो मुझे उनको क्यों नहीं मिला? क्षमा करें – Mawg