पहले रूप का मतलब है कि Circle
संदर्भ के लिए बाध्य वस्तु की स्थिति ( जो कि copy()
फ़ंक्शन का पैरामीटर है, copy()
उस संदर्भ के माध्यम से बदल नहीं जाएगी । संदर्भ एक संदर्भ है const
, इसलिए Circle
उस संदर्भ के सदस्य कार्यों को लागू करना संभव नहीं होगा जो स्वयं के रूप में योग्य नहीं हैं const
।
दूसरी ओर, दूसरा रूप, गैरकानूनी है: केवल सदस्य कार्यों को ही const
अयोग्य ठहराया जा सकता है (जबकि आप जो घोषणा कर रहे हैं वह एक वैश्विक, friend
कार्य है)।
जब const
कोई सदस्य कार्य करता है, तो योग्यता निहित this
तर्क को संदर्भित करती है । दूसरे शब्दों में, उस फ़ंक्शन को उस ऑब्जेक्ट की स्थिति को बदलने की अनुमति नहीं दी जाएगी, जिस पर (ऑब्जेक्ट अंतर्निहित this
सूचक द्वारा इंगित की गई वस्तु ) - mutable
वस्तुओं के अपवाद के साथ , लेकिन यह एक और कहानी है।
इसे कोड के साथ कहने के लिए:
struct X
{
void foo() const
{
_x = 42;
_y = 42;
}
void bar(X& obj) const
{
obj._x = 42;
_x = 42;
}
void bar(X const& obj)
{
obj._x = 42;
obj._y = 42;
_x = 42;
}
int _x;
mutable int _y;
};