pointers - Modifying a const int in C++ -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 8 जवाब
- 7 उत्तर
निम्न कोड चल रहा है कि & amp; एक्स = ptr पता चलता है, तो कैसे x और * ptr बराबर नहीं हैं
const int x = 10; Int * ptr = (int *) और; x; * Ptr = (* ptr) +1; Cout & lt; & lt; & Amp; एक्स & lt; & lt; "" & Lt; & lt; एक्स एंड एलटी; & lt; "" & Lt; & lt; Ptr & lt; & lt; "" & lt; & lt; * ptr; // आउटपुट: 0012 एफएफ 60 10 0012 एफएफ 60 11
सी ++ कार्यान्वयन केवल एक कार्यक्रम के काम अगर आप नियमों का पालन करते हैं आपने नियमों का उल्लंघन किया सी ++ कार्यान्वयन की संभावना इस तरह से हुई:
- क्योंकि
x
घोषित किया गया हैconst
, सी ++ कार्यान्वयन जानता है कि इसका मान तब तक नहीं बदल सकता जब तक कि आप नियमों का पालन करो। इसलिए, जहां भीx
का उपयोग किया जाता है, सी ++ कार्यान्वयन 10 की जांच के बिना परेशान किए 10 का उपयोग करता है किx
बदल गया है। - क्योंकि
* ptr एक गैर- const
int
को इंगित करता है, इसे स्टोर करता है और इसके बारे में पढ़ता है वास्तव में प्रदर्शन किया जाता है। यह "काम" क्योंकि स्मृति में यह इंगित करता है (जहांx
का प्रतिनिधित्व किया जाता है) वास्तव में ऑपरेटिंग सिस्टम द्वारा केवल पढ़ने योग्य नहीं है इस प्रकार, आप इस तथ्य के बावजूद संशोधन करने में सक्षम हैं कि आप अपेक्षा नहीं कर रहे हैं।
देखें कि सी ++ कार्यान्वयन का व्यवहार यदि आप नियमों का पालन करते हैं < / strong>। यदि आपने x
को संशोधित नहीं किया था, तो 10 x
के लिए जहां भी दिखाई देता है वहां सामान्य रूप से काम किया होता। या, अगर आपने x
को const
होना नहीं घोषित किया है, तो सी ++ कार्यान्वयन यह नहीं मानते कि यह हमेशा 10 होगा, इसलिए जब भी एक्स कोड> का उपयोग किया गया था। यह सभी सी ++ मानकों को कार्यान्वयन की आवश्यकता है: यदि आप नियमों का पालन करते हैं तो यह काम करता है।
जब आप नियमों का पालन नहीं करते हैं, तो सी ++ क्रियान्वयन प्रतीत होता है असंगत तरीके से टूट सकता है।
< / div>
Comments
Post a Comment