Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Rvalue- та Lvalue-посилання | Section
Покажчики та Посилання в C++

bookRvalue- та Lvalue-посилання

Свайпніть щоб показати меню

Lvalue та Rvalue

У C++ lvalue та rvalue — це дві основні категорії виразів:

  • Lvalue: об'єкт або область пам'яті, яка має ім'я та може знаходитися зліва від операції присвоєння;
  • Rvalue: тимчасове значення або літерал, яке не має постійної адреси в пам'яті та зазвичай знаходиться справа від операції присвоєння.

Приклади:

int x = 10;      // x is an lvalue, 10 is an rvalue
x = 20;         // x (lvalue) can be assigned a new value (rvalue 20)

Посилання на Lvalue

Посилання на lvalue дозволяє створити псевдонім для існуючої змінної (lvalue). Оголошується за допомогою одного символу &:

int a = 5;
int& ref = a;   // ref is an lvalue reference to a
ref = 8;        // changes the value of a to 8
  • Посилання на lvalue не можуть прив'язуватися до rvalue (тимчасових значень або літералів).

Посилання на Rvalue

Посилання на rvalue дозволяє прив'язати посилання до тимчасового значення (rvalue). Оголошується за допомогою &&:

int&& temp = 42; // temp is an rvalue reference bound to the temporary value 42
  • Посилання на rvalue не можуть прив'язуватися до lvalue (іменованих змінних).
  • Використовуються для оптимізації коду, наприклад, для переміщення ресурсів замість копіювання.

Правила прив'язки посилань

  • Посилання на lvalue (&) прив'язуються до lvalue.
  • Посилання на rvalue (&&) прив'язуються до rvalue.

Приклад:

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

Розуміння цих понять допомагає писати безпечніший та ефективніший код на C++, особливо при використанні сучасних можливостей, таких як семантика переміщення.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 12

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 1. Розділ 12
some-alt