सी ++ 98 में मूल इरादा था कि तुम सी में <cstdint>
का उपयोग करना चाहिए ++, वैश्विक नामस्थान (अच्छी तरह से, विशेष रूप से नहीं <cstdint>
प्रदूषण से बचने के लिए, यह है कि केवल सी ++ 11 है, लेकिन <c*>
में जोड़ दिया जाता है सामान्य में हेडर)।
हालांकि, प्रतीकों को वैश्विक नामस्थान में प्रतीकों को डालने में जारी रखा गया, और सी ++ 11 ने इस अभ्यास को अनुमोदित किया [*]। तो, आप मूल रूप से तीन विकल्प हैं:
- उपयोग
<cstdint>
और या तो पूरी तरह आप का उपयोग वरना यह गुंजाइश में लाने using std::int32_t;
आदि (क्योंकि वर्बोज़ कष्टप्रद के साथ प्रत्येक पूर्णांक प्रकार चुने जाते हैं, लेकिन यह यह सिर्फ करने के लिए की तरह करने के लिए सही रास्ता है सी ++ मानक पुस्तकालय में किसी भी अन्य प्रतीक)
- उपयोग
<stdint.h>
(थोड़ा बुरा क्योंकि हटा दिया गया)
- उपयोग
<cstdint>
और अपने कार्यान्वयन वैश्विक नामस्थान (बहुत बुरा है क्योंकि इसकी गारंटी नहीं) में प्रतीकों डाल देंगे मान।
अभ्यास में मुझे लगता है कि कोड की एक कष्टप्रद बड़ी राशि आखिरी विकल्प का उपयोग करता है, क्योंकि यह एक कार्यान्वयन जहां <cstdint>
ग्लोबल नेम स्पेस में प्रतीकों डालता है पर दुर्घटना से ऐसा करना आसान है पर शक। आपको पहले उपयोग करने की कोशिश करनी चाहिए। दूसरे में एक गुण है, यह की गारंटी देता है ताकि वैश्विक नामस्थान में सामान केवल इसे करने के बजाय रखा जा सके। मुझे नहीं लगता कि यह विशेष रूप से उपयोगी है, लेकिन अगर यह आपकी प्राथमिकता है तो यह कुछ टाइपिंग बचा सकता है।
एक चौथा विकल्प, #include <cstdint>
है जिसके बाद using namespace std;
है जो कभी-कभी उपयोगी होता है लेकिन ऐसे स्थान हैं जहां आपको using namespace std;
नहीं रखना चाहिए। अलग-अलग लोगों के पास अलग-अलग विचार होंगे जहां वे स्थान हैं, लेकिन "हेडर फ़ाइल में शीर्ष स्तर पर" एक सीपीपी फ़ाइल में शीर्ष स्तर पर "से भी बदतर है, जो" सीमित दायरे में "से भी बदतर है। कुछ लोग कभी भी using namespace std;
लिखते हैं।
[*] इसका मतलब है कि सी ++ मानक शीर्षलेखों को वैश्विक नामस्थान में सामान डालने की अनुमति है लेकिन इसकी आवश्यकता नहीं है। तो आपको उन प्रतीकों से टकराने से बचना होगा, लेकिन आप वास्तव में उनका उपयोग नहीं कर सकते क्योंकि वे वहां नहीं हो सकते हैं। असल में, सी ++ में वैश्विक नामस्थान एक खनन क्षेत्र है, इसे टालने का प्रयास करें।कोई तर्क दे सकता है कि समिति ने कार्यान्वयन द्वारा एक अभ्यास को मंजूरी दे दी है जो हेडर फ़ाइल में शीर्ष स्तर पर using namespace std;
चिपकाने के रूप में लगभग हानिकारक है - यह अंतर यह है कि कार्यान्वयन केवल सी मानक पुस्तकालय में प्रतीकों के लिए करते हैं, जबकि using namespace std;
करता है सी ++ के लिए - केवल प्रतीक भी। सी मानक में एक अनुभाग है जो मानक के लिए भविष्य के जोड़ों के लिए आरक्षित नाम सूचीबद्ध करता है। सी ++ वैश्विक नामस्थान में आरक्षित उन नामों का इलाज करने के लिए यह पूरी तरह से बेवकूफ विचार नहीं है, लेकिन यह आवश्यक नहीं है।
स्रोत
2012-11-30 10:08:03
ओएस एक्स 10.8 में '' की कमी है। यहां मुझे मिली त्रुटि है: * '/ misc.h: 7: 10: घातक त्रुटि: 'cstdint' फ़ाइल नहीं मिली * *। –
jww
संबंधित: [सी ++ में सी हेडर का उपयोग करते समय, क्या हमें std :: या वैश्विक नेमस्पेस से फ़ंक्शंस का उपयोग करना चाहिए?] (Http://stackoverflow.com/q/32606023/2020827) – sergej