¿Pasar valor al parámetro de referencia constante?
Pregunta
No he podido encontrar una pregunta similar aquí ni en Google, tal vez porque no sé si estoy haciendo la pregunta correcta, así que no estoy seguro de si el título es correcto.Pero estoy trabajando con un código que se parece a este:
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-> ?
}
Solución
La variable foo
dentro de add
El método es una referencia constante.Se comporta como un puntero en el sentido de que no copia el objeto:interactúas con él como si fuera el objeto mismo.A diferencia de un puntero, una referencia no puede ser NULL
, y no se puede reasignar.Interactúas con él usando un punto. .
operador en lugar del ->
operador.
void add(const Foo & foo){
cout << foo.first_member << endl;
foo.const_member_function();
}
Desde foo
es una referencia constante, puedes leer foo
miembros, pero no puedes asignarlos.Además, cualquier llamada de funciones miembro en el foo
referencia se limitan a funciones marcadas explícitamente const
.
Vocación add
con una desreferenciación foo
está bien, siempre y cuando foo
no es NULL
.Hacer una referencia desreferenciando un NULL
El puntero es un comportamiento indefinido.
Otros consejos
'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.