Sök…


Definiera en referens

Hänvisningar beter sig på samma sätt, men inte helt som konstpekare. En referens definieras genom att suffixera en ampersand & till ett typnamn.

int i = 10;
int &refi = i;

Här är refi en referens bunden till i .
Hänvisningar abstraherar semantiken hos pekare, och fungerar som ett alias till det underliggande objektet:

refi = 20; // i = 20;

Du kan också definiera flera referenser i en enda definition:

int i = 10, j = 20;
int &refi = i, &refj = j;

// Common pitfall :
// int& refi = i, k = j;
// refi will be of type int&.
// though, k will be of type int, not int&!

Hänvisningar måste initialiseras korrekt vid tidpunkten för definitionen och kan inte ändras efteråt. Följande kodkod orsakar ett kompileringsfel:

int &i; // error: declaration of reference variable 'i' requires an initializer

Du kan inte heller binda en referens till nullptr , till skillnad från pekare:

int *const ptri = nullptr;
int &refi = nullptr; // error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'nullptr_t'

C ++ Referenser är Alias av befintliga variabler

En referens i C ++ är bara ett Alias eller ett annat namn på en variabel. Precis som de flesta av oss kan hänvisas med vårt passnamn och smeknamn.

Hänvisningar finns inte bokstavligen och de upptar inget minne. Om vi skriver ut adressen till referensvariabel kommer det att skriva ut samma adress som den för variabeln som den refererar till.

int main() {
    int i = 10;
    int &j = i;
    
    cout<<&i<<endl;
    cout<<&b<<endl;
    return 0;
}

I exemplet ovan kommer båda cout att skriva ut samma adress. Situationen kommer att vara densamma om vi tar en variabel som referens i en funktion

void func (int &fParam ) {
   cout<<"Address inside function => "<<fParam<<endl;
}

int main() {
    int i = 10;
    cout<<"Address inside Main => "<<&i<<endl;    

    func(i);

    return 0;
}

I detta exempel kommer både cout att skriva ut samma adress.

Som vi nu vet att C++ References bara är alias, och för att ett alias ska skapas, måste vi ha något som aliaset kan hänvisa till.

Det är det exakta skälet till att uttalandet som detta kommer att kasta ett kompilatorfel

int &i;

Eftersom aliaset inte hänvisar till någonting.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow