Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Rvalue- ja Lvalue-viittaukset | Section
C++-Osoittimet ja Viittaukset

bookRvalue- 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ää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 12

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 1. Luku 12
some-alt