Pierwsza postać oznacza, że (stan) Circle
obiektu związanego z odwołaniem, które jest parametrem copy()
funkcji, nie zostanie zmieniony przez copy()
to odwołanie. Odwołanie jest odwołaniem do const
, więc nie będzie możliwe wywołanie funkcji składowych za Circle
pośrednictwem tego odwołania, które same nie są kwalifikowane jako const
.
Z drugiej strony, druga forma jest niedozwolona: tylko funkcjeconst
składowe mogą być kwalifikowane (podczas gdy to, co deklarujesz, jest friend
funkcją globalną ).
Gdy const
kwalifikuje funkcję składową, kwalifikacja odwołuje się do niejawnego this
argumentu. Innymi słowy, funkcja ta nie będzie mogła zmienić stanu obiektu, na którym jest wywoływana (obiekt wskazywany przez niejawny this
wskaźnik) - z wyjątkiem mutable
obiektów, ale to już inna historia.
Aby powiedzieć to za pomocą kodu:
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;
};