पहले रूप का मतलब है कि 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;
};