Frage

Ich konnte weder hier noch über Google eine ähnliche Frage finden, vielleicht weil ich nicht weiß, ob ich die richtige Frage stelle, und daher nicht sicher bin, ob der Titel richtig ist.Aber ich arbeite mit Code, der so aussieht:

Foo * foo = new Foo();
add(*foo); //Couldnt find any similar questions on this syntax?

void add(const Foo & foo){

//What exactly is foo here? How can i manipulate its members, foo. or foo-> ?

} 
War es hilfreich?

Lösung

Die Variable foo im Inneren add Methode ist eine konstante Referenz.Es verhält sich wie ein Zeiger in dem Sinne, dass es das Objekt nicht kopiert:Sie interagieren mit ihm, als wäre es das Objekt selbst.Im Gegensatz zu einem Zeiger kann eine Referenz nicht sein NULL, und es kann nicht neu zugewiesen werden.Sie interagieren mit ihm über einen Punkt . Operator anstelle des -> Operator.

void add(const Foo & foo){
    cout << foo.first_member << endl;
    foo.const_member_function();
}

Seit foo ist eine ständige Referenz, die Sie lesen können foo's Mitglieder, aber Sie können sie nicht zuweisen.Auch alle Aufrufe von Mitgliedsfunktionen auf der foo Verweise beschränken sich auf explizit gekennzeichnete Funktionen const.

Berufung add mit einer dereferenzierten foo ist ok, solange foo ist nicht NULL.Erstellen einer Referenz durch Dereferenzieren von a NULL Zeiger ist undefiniertes Verhalten.

Andere Tipps

'foo' is a constant reference. You can access its members via foo.fred, foo.method(), etc., but you can't change any data members or call any non-const methods.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top