2011-03-29 16 views
9

संभव डुप्लिकेट:
Why is 'using namespace std;' considered a bad practice in C++?नामस्थान std का उपयोग करने के बजाय अनुभवी कोडर द्वारा std :: का उपयोग क्यों किया जाता है ??

दूसरे दिन जब मैंने पूछा कि किसी से प्रश्न करते हुए कहा उत्तर दिया कोई एक सवाल पूछता है कि, उन्हें using namespace std; के बजाय यह करने के लिए सही रास्ता दिखाने के जो मैं सोचा थोड़ा अजीब था, using namespace std;रास्ता आसान है, लेकिन मुझे लगता है कि मैं अभी विफल रहा हूं क्योंकि मैं एक 'शुरुआती' कोडर हूं और आप लोग बेहतर जानते हैं।

तो मुझे लगता है कि मेरा प्रश्न है: using namespace std; के बजाय क्यों?

धन्यवाद।

+2

देखें http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-a-bad-practice-in-c – Sapph

उत्तर

20

सी ++ पूछे जाने वाले प्रश्न से:

मैं अपने कोड में using namespace std उपयोग करना चाहिए?

शायद नहीं।

लोग std:: अधिक से अधिक टाइपिंग पसंद नहीं है, और उन्हें पता चलता है कि using namespace std संकलक की सुविधा देता है देखने के किसी भी std नाम, यहां तक ​​कि अयोग्य हैं। उस मलम में उड़ना यह है कि यह को संकलक किसी भीstd नाम, यहां तक ​​कि जिन्हें आपने नहीं सोचा था, देखते हैं। अन्य शब्दों में, यह नाम विवादों और अस्पष्टताएं बना सकता है।

https://isocpp.org/wiki/faq/coding-standards#using-namespace-std

+0

+ !: अच्छा उद्धरण, यह सब कहता है। –

+1

क्या कोई दक्षता लाभ है या यह एक मुद्दा है? – chustar

+0

@chustar: "दक्षता" से आपका क्या मतलब है? –

0

नाम स्थान (रों) हमारे चर के लिए अतिरिक्त क्वालिफायर हैं। आइए कहें कि हमारे पास std में परिभाषित 'स्ट्रिंग' है और अब यदि हम mynamespace में 'स्ट्रिंग' को परिभाषित करते हैं।

अब, अगर मैं फ़ाइल के शीर्ष पर using namespace std; लिखता हूं, तो वहां से एक स्ट्रिंग एक कंपाइलर के लिए संदिग्ध हो जाती है।

हालांकि कोई हेडर (.h) फ़ाइल में सख्ती से using namespace std; नहीं होने के बीच मध्य दृष्टिकोण ले सकता है, क्योंकि अन्य लोग आपकी कक्षा का उपयोग करना चाहते हैं और संघर्ष प्राप्त कर सकते हैं। एक कार्यान्वयन (.cxx) फ़ाइल के लिए, आप इसका उपयोग करने के लिए सावधान रह सकते हैं यदि आप सुनिश्चित हैं कि कोई संघर्ष नहीं होगा।

4

बस शब्दों में कहें, गलती से गलत प्रकार या फ़ंक्शंस या नाम विवादों का उपयोग करने की संभावना कम है। मान लें कि आप अपने गणित पुस्तकालय, प्लस एसडीडी का उपयोग कर रहे हैं, और कुछ मनमाने ढंग से क्रम में दोनों का उपयोग करके घोषणा करते हैं। अब, वे दोनों फ़ंक्शन पाउ को परिभाषित करते हैं। जब आप पाउ का आह्वान करते हैं तो आप किस पाउ का उपयोग कर रहे हैं? मुझे लगता है कि यह अतिरिक्त टाइपिंग के लायक है।

2

मुझे नहीं लगता कि यह मामला है कि अधिक अनुभवी प्रोग्रामर स्पष्ट नामस्थान का उपयोग करते हैं, उदाहरण के लिए देखें।Do you prefer explicit namespaces or 'using' in C++?

नोट तथापि कि आप कार्यों std::min() और std::max()

1

साथ कुछ मामलों स्पष्ट नामस्थान स्पष्ट कर रहे हैं में हेडर फाइल में नामस्थान और कहा कि आयात कभी नहीं करना चाहिए, उदाहरण के लिए मुझे लगता है कि यह कुछ क्या एक प्राथमिकता बात है। कक्षाओं का उपयोग करते समय कुछ लोग स्पष्ट नामस्थान देखना पसंद करते हैं। एक अपवाद है कि मैं कभी भी हेडर फ़ाइल में किसी नामस्थान नाम का उपयोग नहीं कर सकता। चूंकि यह अप्रत्याशित रूप से उस वर्ग के व्यवहार को बदल सकता है जो इस हेडर फ़ाइल का उपयोग कर रहा है।

0

अनुभवी प्रोग्रामर जो भी अपनी समस्याओं का समाधान करते हैं और जो भी नई समस्याएं पैदा करते हैं, उससे बचते हैं।

इस प्रकार वे स्पष्ट कारण के लिए हेडर-फ़ाइल-स्तर का उपयोग-निर्देशों से बचते हैं।

और वे अपनी स्रोत फ़ाइलों के अंदर नामों की पूर्ण योग्यता से बचने का प्रयास करते हैं। मामूली बात यह है कि कम कोड बिना किसी अच्छे कारण के बिना कम कोड लिखना सुरुचिपूर्ण नहीं है। प्रमुख बिंदु एडीएल बंद कर रहा है।

इन अच्छे कारण क्या हैं? कभी-कभी आप स्पष्ट रूप से एडीएल बंद करना चाहते हैं। कभी-कभी आप असंबद्ध करना चाहते हैं।

तो निम्न ठीक हैं: 1) कार्य-स्तर का उपयोग-निर्देश और कार्यों के कार्यान्वयन के भीतर घोषणा-घोषणा; 2) स्रोत फाइलों के अंदर स्रोत-फ़ाइल-स्तर का उपयोग-घोषणाएं; 3) (कभी-कभी) स्रोत-फ़ाइल-स्तर का उपयोग-निर्देश।

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