Die erste Form bedeutet, dass das (Status des) CircleObjekts, das an die Referenz gebunden ist, die der Parameter der copy()Funktion ist, copy()durch diese Referenz nicht geändert wird . Die Referenz ist eine Referenz auf const, daher ist es nicht möglich, Mitgliedsfunktionen von Circleüber diese Referenz aufzurufen , die selbst nicht als qualifiziert sind const.
Die zweite Form ist dagegen illegal: Nur Mitgliedsfunktionen können qualifiziert werden const(während das, was Sie dort deklarieren, eine globale friendFunktion ist).
Wenn consteine Mitgliedsfunktion qualifiziert wird, bezieht sich die Qualifikation auf das implizite thisArgument. Mit anderen Worten, diese Funktion darf den Status des Objekts, auf das sie aufgerufen wird (das Objekt, auf das der implizite thisZeiger zeigt), nicht ändern - mit Ausnahme von mutableObjekten, aber das ist eine andere Geschichte.
Um es mit Code zu sagen:
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;
};