Dúvida sobre Constructor em uma Class no C++

Olá.
Pedi para o chat GPT me gerar um código com alocação dinâmica de um objeto e ele me devolveu o seguinte código:

#include <iostream>
#include <string>

class Person {
private:
    std::string name;
    int age;

public:
    Person(const std::string& n, int a) : name(n), age(a) {} //minha dúvida

    void displayInfo() {
        std::cout << "Name: " << name << ", Age: " << age << std::endl;
    }
};

int main() {
    // Dynamically allocate a Person object
    Person* person = new Person("John Doe", 30); 

    // Access object's member functions
    person->displayInfo();

    // Deallocate the memory
    delete person;

    return 0;
}

Minha dúvida é neste trecho:

Person(const std::string& n, int a) : name(n), age(a) {}

Não entendi a razão do ChatGPT ter usado o operador “&” para referenciar um endereço, sendo que o que está sendo passado é uma string literal, que é tratada como uma constante em C++. Ao questiná-lo, foi respondido que n está referenciando à um objeto, mas nem a string literal, nem a variável name, pra mim eles são member variables do objeto que seria person.

E o int a não possui a mesma notação pois segundo o ChatGPT não haveria necessidade nesse código de alterar o objeto original, ou seja só precisariamos do valor copiado. Também não entendi essa explicação int age seria também um objeto?

Resumindo Não entendi a razão de se utilizar & no ponto em que eu destaquei e o motivo do Chat considerar std::string como um objeto. :face_with_raised_eyebrow:
E para mim como um iniciante em C++ acho um pouco estranho essa notação “name(n), age(a) {}”.
Desde já agradeço.