Rvalue- ja Lvalue-viittaukset
Pyyhkäise näyttääksesi valikon
Lvalue- ja Rvalue-arvot
C++:ssa lvalue- ja rvalue-arvot ovat kaksi peruskategoriaa lausekkeille:
- Lvalue: olio tai muistipaikka, jolla on nimi ja joka voi esiintyä sijoituslauseen vasemmalla puolella;
- Rvalue: väliaikainen arvo tai literaali, jolla ei ole pysyvää muistiosoitetta ja joka esiintyy yleensä sijoituslauseen oikealla puolella.
Esimerkkejä:
int x = 10; // x is an lvalue, 10 is an rvalue
x = 20; // x (lvalue) can be assigned a new value (rvalue 20)
Lvalue-viittaukset
Lvalue-viittauksen avulla voidaan luoda alias olemassa olevalle muuttujalle (lvalue). Se määritellään yhdellä &-merkillä:
int a = 5;
int& ref = a; // ref is an lvalue reference to a
ref = 8; // changes the value of a to 8
- Lvalue-viittaukset eivät voi sitoutua rvalue-arvoihin (väliaikaisiin arvoihin tai literaaleihin).
Rvalue-viittaukset
Rvalue-viittauksen avulla voidaan sitoa viittaus väliaikaiseen arvoon (rvalue). Se määritellään käyttämällä &&:
int&& temp = 42; // temp is an rvalue reference bound to the temporary value 42
- Rvalue-viittaukset eivät voi sitoutua lvalue-arvoihin (nimettyihin muuttujiin).
- Niitä käytetään koodin optimointiin, esimerkiksi resurssien siirtämiseen kopioinnin sijaan.
Viittausten sitomissäännöt
- Lvalue-viittaukset (
&) sitoutuvat lvalue-arvoihin. - Rvalue-viittaukset (
&&) sitoutuvat rvalue-arvoihin.
Esimerkki:
int x = 7;
int& lref = x; // valid: lref binds to lvalue x
// int& lref2 = 8; // error: cannot bind lvalue reference to rvalue
int&& rref = 8; // valid: rref binds to rvalue 8
// int&& rref2 = x; // error: cannot bind rvalue reference to lvalue
Näiden käsitteiden ymmärtäminen auttaa kirjoittamaan turvallisempaa ja tehokkaampaa C++-koodia, erityisesti käytettäessä moderneja ominaisuuksia kuten siirtosemanttiikkaa.
Oliko kaikki selvää?
Kiitos palautteestasi!
Osio 1. Luku 12
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Osio 1. Luku 12