¿Qué hace '&' en una declaración de C ++?

Soy un chico C y estoy tratando de entender algo de código C ++. Tengo la siguiente declaración de función:

int foo(const string &myname) {
  cout << "called foo for: " << myname << endl;
  return 0;
}

¿En qué se diferencia la firma de función del equivalente C:

int foo(const char *myname)

¿Hay alguna diferencia entre usarstring *myname vsstring &myname? Cuál es la diferencia entre& en C ++ y* en C para indicar punteros?

Similar:

const string &GetMethodName() { ... }

Cuál es el& ¿haciendo aquí? ¿Hay algún sitio web que explique cómo?& se usa de manera diferente en C vs C ++?

Respuestas a la pregunta(7)

Su respuesta a la pregunta