Advanced  Services (lvalue) Referenzen


(lvalue) Referenzen

Da in C++11 sogenannte rvalue-Referenzen (r = rechts) eingeführt wurden, nennen wir hier die klassischen Referenzen lvalue-Referenzen.
Eine Referenz ist ein Alias für eine bestehende Variable, also ein zweiter Name für denselben Speicherplatz.

int a = 17;

int &ref = a;
ref++;
cout << a << endl;  // 18

int b = 71;
ref = b;
cout << "rf = " << rf << endl;

//int &ref2 = 17;
// invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'

Referenzen treten in C++ als Parameter und Returntyp bei Funktionen und Methoden auf und werden im Hintergrund mit Hilfe von Pointern realisiert. Im Unterschied zu Pointern gibt es aber keine void-Referenz.

Dem obigen Beispiel entnimmt man folgende Regeln.


const-Referenzen

Eine const-Referenz ist ein Alias das nur Leserechte auf die Variable hat.

int a = 17;
int b = 71;

const int &ref = a;
//ref++;  // error: increment of read-only reference
ref = b;  // error: assignment of read-only reference
ref = 42; // error: assignment of read-only reference

const int &ref2 = 42;  // OK

short sh = 32;
const int &ref2 = sh;  // OK

Für eine const-Referenz gelten folgende Regeln