यह ज्यादातर दूसरी पंक्ति को संबोधित करता है: सर्वोत्तम अभ्यास, असाइनमेंट, फ़ंक्शन पैरामीटर आदि।
सामान्य अभ्यास। const
वह सब कुछ करने की कोशिश करें जो आप कर सकते हैं। या उस दूसरे तरीके को लगाने के लिए, const
शुरू करने के लिए सब कुछ करें और फिर बिल्कुल न्यूनतम सेट हटा देंconst
प्रोग्राम को कार्य करने की अनुमति देने के लिए आवश्यक । यह कांस्ट-करेक्शन को प्राप्त करने में एक बड़ी मदद होगी, और यह सुनिश्चित करने में मदद करेगी कि सूक्ष्म कीड़े पेश न हों जब लोग कोशिश करते हैं और उन चीजों में असाइन होते हैं जिन्हें वे संशोधित नहीं करना चाहते हैं।
प्लेग की तरह const_cast <> से बचें। इसके लिए एक या दो वैध उपयोग के मामले हैं, लेकिन वे बहुत कम हैं और बीच में बहुत दूर हैं। यदि आप किसी const
ऑब्जेक्ट को बदलने की कोशिश कर रहे हैं , तो आप यह जानने के लिए बहुत बेहतर करेंगे कि जिसने भी इसे const
पहली गति में घोषित किया है और जो बात होनी चाहिए, उस पर आम सहमति तक पहुंचने के लिए उनके साथ बात करें।
जो असाइनमेंट में बहुत करीने से ले जाता है। आप किसी चीज में तभी असाइन कर सकते हैं जब वह नॉन-कास्ट हो। यदि आप किसी ऐसी चीज़ में असाइन करना चाहते हैं, जो कॉन्स्टेबल है, तो ऊपर देखें। याद रखें कि घोषणाओं में int const *foo;
और int * const bar;
विभिन्न चीजें हैं const
- यहां अन्य उत्तरों ने उस मुद्दे को विशेष रूप से कवर किया है, इसलिए मैं इसमें नहीं जाऊंगा।
समारोह पैरामीटर:
मान से पास करें: जैसे void func(int param)
आप कॉलिंग साइट पर एक तरह से या दूसरे तरीके से परवाह नहीं करते हैं। यह तर्क दिया जा सकता है कि फ़ंक्शन को घोषित करने के लिए उपयोग के मामले हैं, void func(int const param)
लेकिन इससे कॉल करने वाले पर कोई प्रभाव नहीं पड़ता है, केवल फ़ंक्शन पर ही, इसमें जो भी मान पास होता है उसे कॉल के दौरान फ़ंक्शन द्वारा नहीं बदला जा सकता है।
संदर्भ से गुजारें: उदाहरण के लिए void func(int ¶m)
अब यह एक फर्क पड़ता है। जैसा कि अभी घोषित किया गया func
है कि परिवर्तन की अनुमति है param
, और किसी भी कॉलिंग साइट को परिणामों से निपटने के लिए तैयार होना चाहिए। void func(int const ¶m)
अनुबंध को बदलने की घोषणा को बदलना , और गारंटी देता है कि func
अब बदल नहीं सकता है param
, जिसका अर्थ है कि जो बीत चुका है वह वापस आ जाएगा। जैसा कि अन्य ने उल्लेख किया है कि यह एक बड़ी वस्तु को सस्ते में पारित करने के लिए बहुत उपयोगी है जिसे आप बदलना नहीं चाहते हैं। एक संदर्भ को पास करना एक बड़ी वस्तु को मूल्य से पारित करने की तुलना में बहुत सस्ता है।
सूचक को पार करें: उदाहरण के लिए void func(int *param)
और void func(int const *param)
इन दो, सुंदर उनके संदर्भ समकक्षों के साथ ज्यादा पर्याय बन गया है चेतावनी बुलाया समारोह अब के लिए जाँच करने की जरूरत है कि के साथ nullptr
जब तक कुछ अन्य संविदात्मक गारंटी का आश्वासन दिया func
है कि यह एक नहीं प्राप्त होगा nullptr
में param
।
उस विषय पर ओपिनियन पीस। इस तरह से एक मामले में शुद्धता साबित करना मुश्किल है, बस गलती करना बहुत आसान है। तो संभावना मत लो, और हमेशा के लिए सूचक मापदंडों की जाँच करें nullptr
। आप लंबे समय में कीड़े खोजने के लिए अपने आप को दर्द और पीड़ा और कड़ी मेहनत से बचाएंगे। और चेक की लागत के रूप में, यह गंदगी सस्ती है, और ऐसे मामलों में जहां संकलक में निर्मित स्थैतिक विश्लेषण इसे प्रबंधित कर सकता है, आशावादी इसे वैसे भी खत्म कर देगा। MSCC के लिए लिंक टाइम कोड जेनरेशन, या GCC के लिए WOPR (मुझे लगता है) चालू करें, और आप इसे प्रोग्राम वाइड प्राप्त करेंगे, अर्थात फ़ंक्शन कॉल में भी जो सोर्स कोड मॉड्यूल सीमा पार करते हैं।
दिन के अंत में उपरोक्त सभी बिंदुओं के संदर्भ को हमेशा प्राथमिकता देने के लिए एक बहुत ही ठोस मामला बनता है। वे सिर्फ चौतरफा सुरक्षित हैं।