2010-01-06 8 views
8

मैंने पढ़ा है कि निर्देश का उपयोग सी ++ में प्रोत्साहित नहीं किया जाता है कि कभी भी हेडर फ़ाइलों में निर्देशों का उपयोग न करें। ऐसा क्यों है? मेरे लिए कोई संकेत?क्यों सी ++ में निर्देश का उपयोग प्रोत्साहित नहीं किया जाता है?

धन्यवाद!

उत्तर

2

using namespace x; एक बहुत बुरा विचार है, क्योंकि आपके पास कोई विचार नहीं है मानक पुस्तकालय के साथ भी आप कौन से नाम आयात कर रहे हैं।

हालांकि: using std::cout; और इसी तरह के बयान एक बहुत अच्छा विचार है, क्योंकि वे प्रतीकों को स्पष्ट रूप से आयात करते हैं और कोड अधिक पठनीय बनाने (हालांकि यह अभी भी एक अच्छा विचार उन्हें हेडर फाइल में वैश्विक क्षेत्र में डालने के लिए नहीं हो सकता है) कर रहे हैं ।

+1

जो आपके द्वारा आयात किए जाने वाले नामों की परवाह करता है, यदि कोई अस्पष्टता है तो कंपाइलर त्रुटियां ... – Inverse

+3

@ उलटा, न केवल आप नाम दिखाना चाहते हैं, लेकिन नाम दोनों निर्देशों का उपयोग करते हुए एक विस्तृत व्यापक दायरे के हिस्से के रूप में दिखाई दे रहे हैं लेकिन नामस्थान भी यह निर्दिष्ट करता है। नाम स्पष्ट रूप से उस दायरे में आयात नहीं किए जाते हैं जहां निर्देश प्रकट होता है। तो अधिक नामों के साथ अस्पष्टताएं संभव हैं। –

3

क्योंकि यह आपके हेडर को जोड़ने का प्रयास करते समय काम करने वाले कोड को तोड़ सकता है, यदि आपका हेडर नेमस्पेस पिछले नाम कोड में परिभाषित अन्य नेमस्पेस को टंप करता है।

4

आप 'का उपयोग' के निर्देश के बारे में बात कर रहे हैं, उसका उपयोग नहीं करने के लिए कारण यह है कि अगर आप कहते हैं कि

using namespace std;

एक हेडर फाइल में

, सभी फ़ाइलें कि शीर्ष लेख # शामिल मजबूर किया जाएगा उस नामस्थान का उपयोग करने के लिए, और इससे समस्याएं पैदा हो सकती हैं।

+1

नहीं, उन्हें उस नामस्थान का उपयोग करने के लिए मजबूर नहीं किया जाएगा। –

+0

"यह एक तर्क नहीं है, यह सिर्फ विरोधाभास है!" – struppi

+0

@struppi mynamespace :: foo = 1 –

0

यह हेडर फ़ाइलों में स्थिर चर घोषित करने के समान नहीं है। हेडर फाइलों में कथन का उपयोग करना नामस्थान को .cpp फ़ाइलों में लाएगा जिसमें हेडर फ़ाइल शामिल है। यह आवश्यक नहीं है। बदतर मामले में, आपको नामकरण विवादों से बचने के लिए .cpp में कुछ चर या फ़ंक्शन नामों को बदलना पड़ सकता है।

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