अपनी कक्षा A
की एक भिन्नता पर विचार करें।
class A {
public:
void Foo() const;
void Moo();
private:
int m_nState; // Could add mutable keyword if desired
int GetState() const { return m_nState; }
void SetState(int val) { m_nState = val; }
};
const A *A1 = new A();
A *A2 = new A();
A1->Foo(); // OK
A2->Foo(); // OK
A1->Moo(); // Error - Not allowed to call non-const function on const object instance
A2->Moo(); // OK
एक समारोह घोषणा पर const
कीवर्ड संकलक कि समारोह A
की स्थिति संशोधित करने के लिए नहीं किसी अनुबंध के लिए बाध्य है करने के लिए इंगित करता है। इस प्रकार आप A::Foo
के भीतर गैर-const
फ़ंक्शंस को कॉल करने में असमर्थ हैं और न ही सदस्य चर के मान को बदल सकते हैं।
समझाने के लिए, फू()A::SetState
आह्वान नहीं हो सकता है के रूप में यह गैर घोषित किया जाता है const
, A::GetState
लेकिन ठीक है क्योंकि यह स्पष्ट रूप से const
घोषित किया जाता है। m_nState
सदस्य को तब तक बदला नहीं जा सकता है जब तक कि कीवर्ड mutable
कीवर्ड के साथ घोषित न किया जाए।
const
के इस उपयोग का एक उदाहरण सदस्य चर के मान प्राप्त करने के लिए 'गेटटर' फ़ंक्शंस के लिए है।
@ 1800 सूचना: मैं mutable के बारे में भूल गया!
mutable
कीवर्ड सदस्य चर में संशोधन स्वीकार करने के लिए संकलक को निर्देश देता है जो अन्यथा एक कंपाइलर त्रुटि का कारण बनता है। इसका उपयोग तब किया जाता है जब फ़ंक्शन को राज्य को संशोधित करने की आवश्यकता होती है लेकिन संशोधन को ध्यान में रखते हुए वस्तु को तर्कसंगत रूप से लगातार (स्थिर) माना जाता है।
महान उत्तर - वास्तव में स्पष्ट और संक्षेप में। मेरा +1 मिला –