Angenommen, wir haben ein folgendes Stück Code:Bitte klären const Qualifier Ausbreitung
class Base {
public:
int a = 5;
};
class Derived : public Base {
public:
Base *parent_ = new Base;
Base* parent() const { return parent_; }
};
void f(const Derived *derived) {
Base *p = derived->parent();
p->a = 10; // <- is this correct?
}
Ich persönlich denke, hier ist ein Problem:
In Funktion
f
nehmen wir einen Zeiger aufconst
Objekt der KlasseDerived
. Dies macht jedes Mitglied davon auchconst
alsoparent_
wirdconst Base *
. Wenn es const ist, sollten wir nicht in der Lage sein, das Objekt zu modifizieren, auf das der Zeiger zeigt.
Wo liege ich falsch?
'int a = 5;' - ist das C++ 11? – sashoalm
'parent_' ist vom Typ' Base * const', nicht 'const Base *'. – Quentin
@ashoalm ja, ist es.Aber ich habe die Frage nicht mit 'C++ 11' versehen, weil das irrelevant ist. –