C++
Referenties
Zoeken…
Een referentie definiëren
Verwijzingen gedragen zich op dezelfde manier, maar niet helemaal als const pointers. Een verwijzing wordt gedefinieerd door een ampersand &
te voegen naar een typenaam.
int i = 10;
int &refi = i;
Hier is refi
een verwijzing gebonden aan i
.
Referenties abstraheert de semantiek van verwijzingen en gedraagt zich als een alias voor het onderliggende object:
refi = 20; // i = 20;
U kunt ook meerdere referenties definiëren in één definitie:
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&!
Referenties moeten correct worden geïnitialiseerd op het moment van definitie en kunnen achteraf niet worden gewijzigd. Het volgende stuk codes veroorzaakt een compileerfout:
int &i; // error: declaration of reference variable 'i' requires an initializer
U kunt ook geen directe verwijzing naar nullptr
, in tegenstelling tot pointers:
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 ++ Referenties zijn Alias van bestaande variabelen
Een referentie in C ++ is gewoon een Alias
of een andere naam van een variabele. Net zoals de meesten van ons kan worden verwezen met behulp van onze paspoortnaam en bijnaam.
Verwijzingen bestaan niet letterlijk en nemen geen geheugen in beslag. Als we het adres van de referentievariabele afdrukken, wordt hetzelfde adres afgedrukt als dat van de variabele waarnaar het verwijst.
int main() {
int i = 10;
int &j = i;
cout<<&i<<endl;
cout<<&b<<endl;
return 0;
}
In het bovenstaande voorbeeld drukken beide cout
hetzelfde adres af. De situatie zal hetzelfde zijn als we een variabele als referentie nemen in een functie
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;
}
Ook in dit voorbeeld zullen beide cout
hetzelfde adres afdrukken.
Zoals we inmiddels weten dat C++ References
alleen alias zijn, en om een alias te kunnen maken, moeten we iets hebben waarnaar de Alias kan verwijzen.
Dat is de precieze reden waarom de uitspraak als deze een compilerfout veroorzaakt
int &i;
Omdat de alias nergens naar verwijst.