कार्यान्वयन से परिभाषित व्यवहार और अपरिभाषित व्यवहार
सी ++ मानक विभिन्न निर्माणों के प्रभाव के बारे में बहुत विशिष्ट है, और विशेष रूप से आप हमेशा मुसीबत की इन श्रेणियों के बारे में पता होना चाहिए:
अपरिभाषित व्यवहार का अर्थ है कि बिल्कुल कोई गारंटी नहीं दी जाती है। कोड काम कर सकता है, या यह आपके हार्डड्राइव या make demons fly out your nose पर आग लगा सकता है। जहां तक सी ++ भाषा का सवाल है, बिल्कुल कुछ भी हो सकता है। व्यावहारिक शब्दों में, इसका आम तौर पर मतलब है कि आपके पास एक अप्राप्य बग है। यदि ऐसा होता है, तो आप वास्तव में अपने आवेदन के बारे में कुछ भी पर भरोसा नहीं कर सकते हैं (क्योंकि इस अपरिभाषित व्यवहार के प्रभावों में से एक आपके बाकी ऐप द्वारा उपयोग की गई स्मृति को गड़बड़ कर सकता है)।इसे सुसंगत होने की आवश्यकता नहीं है, इसलिए प्रोग्राम को दो बार चलाने से अलग-अलग परिणाम मिल सकते हैं। यह चंद्रमा के चरणों, आपके द्वारा पहनने वाली शर्ट का रंग, या बिल्कुल कुछ और पर निर्भर हो सकता है।
निर्दिष्ट व्यवहार का अर्थ है कि कार्यक्रम को कुछ सन और संगत करना चाहिए, लेकिन दस्तावेज़ पर यह आवश्यक नहीं है।
कार्यान्वयन-परिभाषित व्यवहार अनिर्दिष्ट के समान है, लेकिन संकलक लेखकों द्वारा भी दस्तावेज किया जाना चाहिए। इसका एक उदाहरण reinterpret_cast
का परिणाम है। आमतौर पर, यह पते को संशोधित किए बिना बस एक सूचक के प्रकार को बदलता है, लेकिन मैपिंग वास्तव में क्रियान्वयन-परिभाषित है, इसलिए एक कंपाइलर नक्शा एक पूरी तरह से अलग पते पर नक्शा कर सकता है, जब तक यह इस विकल्प को दस्तावेज करता है। एक और उदाहरण एक int का आकार है। अगर यह 2, 4 या 8 बाइट्स सी ++ मानक परवाह नहीं करता है, लेकिन यह संकलक द्वारा प्रलेखित किया जाना चाहिए
लेकिन आम इन सभी के लिए है कि वे सबसे अच्छा बचा रहे हैं। जब संभव हो, तो व्यवहार के साथ चिपकें जो 100% सी ++ मानक द्वारा निर्दिष्ट है। इस तरह, आप पोर्टेबिलिटी की गारंटी है।
आपको अक्सर कुछ कार्यान्वयन-परिभाषित व्यवहार पर भरोसा करना पड़ता है। यह अपरिहार्य हो सकता है, लेकिन आपको अभी भी इसका ध्यान देना चाहिए, और इस बात से अवगत रहें कि आप उस पर भरोसा कर रहे हैं जो विभिन्न कंपाइलरों के बीच बदल सकता है।
दूसरी ओर, अनिर्धारित व्यवहार हमेशा से बचा जाना चाहिए। आम तौर पर, आपको यह मानना चाहिए कि यह आपके प्रोग्राम को एक या दूसरे तरीके से विस्फोट कर देता है।
यदि आप किसी और के संपादन को वापस रोल करने का निर्णय लेते हैं, तो कृपया सुनिश्चित करें कि आपकी वर्तनी, विराम चिह्न और व्याकरण सही हैं। मूल पाठ पर पर्याप्त सुधार होने वाले संपादन को पीछे छोड़ना व्यर्थ है। –