O que '&' faz em uma declaração C ++?

Eu sou um cara C e estou tentando entender algum código C ++. Eu tenho a seguinte declaração de função:

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

Como a assinatura da função difere do equivalente C:

int foo(const char *myname)

Existe uma diferença entre usarstring *myname vsstring &myname? Qual é a diferença entre& em C ++ e* em C para indicar ponteiros?

Similarmente:

const string &GetMethodName() { ... }

O que é& fazendo aqui? Existe algum site que explica como& é usado de forma diferente em C vs C ++?

questionAnswers(7)

yourAnswerToTheQuestion