Pierwsza postać oznacza, że (stan) Circleobiektu 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 Circlepoś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 friendfunkcją globalną ).
Gdy constkwalifikuje funkcję składową, kwalifikacja odwołuje się do niejawnego thisargumentu. Innymi słowy, funkcja ta nie będzie mogła zmienić stanu obiektu, na którym jest wywoływana (obiekt wskazywany przez niejawny thiswskaźnik) - z wyjątkiem mutableobiektó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;
};