Domanda

Non sono stato in grado di trovare una domanda simile qui, o attraverso Google, forse perché non so se sto chiedendo la domanda giusta, quindi non sono sicuro se il titolo ha ragione.Ma sto lavorando con il codice che assomiglia a questo:

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-> ?

} 
.

È stato utile?

Soluzione

La variabile foo all'interno del metodo add è un riferimento costante.Si comporta come un puntatore nel senso che non copia l'oggetto: interagile con esso come se fosse l'oggetto stesso.A differenza di un puntatore, un riferimento non può essere NULL e non può essere riassegnato.Si interagisce con esso utilizzando un operatore . DOT invece dell'operatore ->.

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

Poiché foo è un riferimento costante, puoi leggere i membri del foo, ma non è possibile assegnarli.Inoltre, eventuali chiamate delle funzioni dei membri sul riferimento foo sono limitate a funzioni contrassegnate in modo esplicito const.

Chiamare add con un foo Dereferenced è OK, purché foo non sia NULL.Effettuare un riferimento per Dereferencing Un puntatore NULL è un comportamento indefinito.

Altri suggerimenti

'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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top