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.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Rvalue- ja Lvalue-viittaukset
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.
Kiitos palautteestasi!