Rvalue- та 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
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Секція 1. Розділ 12