Advanced Services | (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.
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