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

} 
¿Fue útil?

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 foomiembros, 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top