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

Popular posts from this blog

scala - Play Framework - how to bind form to a session field -

c++ - Why does Visual Studio Release build break on non-executing code line -

Firefox reacting to JQuery setTimeout that doesn't apply -