Перша форма означає, що 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;
};