Valore di passaggio al parametro di riferimento conSt?
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-> ?
}
. 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.