L – qiymatli va R -qiymatli havolalar


![using namespace std;
int main() {
int a = 10; // 'a' bu L-qiymatli havola, '10' esa R-qiymatli havola
int b = 20; // 'b' bu L-qiymatli havola, '20' esa R-qiymatli havola
a = b; // Bu yerda 'a' L-qiymatli havola, 'b' esa R-qiymatli havola
b = a + 10; // Bu yerda 'b' L-qiymatli havola, 'a + 10' esa R-qiymatli havola
cout << "a: " << a << endl; // a: 20
cout << "b: " << b << endl; // b: 30
// Misol sifatida L-qiymatli havolani o'zgartirish
a = 15;
cout << "a: " << a << endl; // a: 15
// L-qiymatli havola sifatida massiv elementi
int arr[3] = {1, 2, 3};
arr[0] = 5; // arr[0] bu L-qiymatli havola
cout << "arr[0]: " << arr[0] << endl; // arr[0]: 5
return 0;
}
Yuqoridagi kodlar C++ da lvalue va rvalue tushunchalarini hamda ularning referenslari bilan ishlashni
tushunishga yordam beradi.
2.C++ tilida i-qiymatli va r-qiymatli murojaatlarni farqlash:](/data/documents/fcd03ce2-d930-4126-a20f-7776501006a3/page_3.png)




![class MyClass {
public:
MyClass() {
data = new int[10];
std::cout << "Constructor" << std::endl;
}
~MyClass() {
delete[] data;
std::cout << "Destructor" << std::endl;
}
// Move constructor
MyClass(MyClass&& other) noexcept {
data = other.data;
other.data = nullptr;
std::cout << "Move Constructor" << std::endl;
}
// Move assignment operator
MyClass& operator=(MyClass&& other) noexcept {
if (this != &other) {
delete[] data;
data = other.data;
other.data = nullptr;
std::cout << "Move Assignment" << std::endl;
}
return *this;
}](/data/documents/fcd03ce2-d930-4126-a20f-7776501006a3/page_8.png)

![int y = 7;
x = y + 3;
cout << "x: " << x << endl; // x: 10
return 0;
}
L-qiymatli havola sifatida massiv elementi
#include <iostream>
using namespace std;
int main() {
int arr[3] = {1, 2, 3};
arr[0] = 10;
cout << "arr[0]: " << arr[0] << endl; // arr[0]: 10
return 0;
}
L-qiymatli va R-qiymatli havolalar bilan funksiyalar
#include <iostream>
using namespace std;
void setToTen(int& x) { // L-qiymatli havola qabul qiluvchi funksiya
x = 10;
}
int main() {
int a = 5;](/data/documents/fcd03ce2-d930-4126-a20f-7776501006a3/page_10.png)


Reja: 1.l-qiymatli va r-qiymatli havolalar bilan tanishish 2. C++ tilida l-qiymatli va r-qiymatli murojaatlarni farqlash 3. C++ dasturlashda l-qiymatlarining rolini tushunish 4.Xulosa:
C++ tilida lvalue (chap qiymat) va rvalue (o'ng qiymat) tushunchalari juda muhimdir. Bu tushunchalar, ayniqsa, C++11 dan boshlab kiritilgan rvalue references (o'ng qiymatli havolalar) va move semantics (ko'chirish semantikasi) bilan yanada kengaytirilgan. Misollar lvalue va rvalue lvalue : Bu xotirada manzili mavjud bo'lgan ob'ektni anglatadi. Uni o'ng tomonda yoki chap tomonda ishlatish mumkin. Masalan, o'zgaruvchilar lvalue hisoblanadi. rvalue : Bu vaqtinchalik qiymat yoki ifodaning natijasidir. Uni faqat o'ng tomonda ishlatish mumkin. Masalan, literallar (raqamlar kabi) rvalue hisoblanadi. lvalue references va rvalue references lvalue reference ( T& ): Bu o'zgaruvchi yoki ob'ektni ifodalash uchun ishlatiladi. rvalue reference ( T&& ): Bu vaqtinchalik ob'ektlar bilan ishlash va ularni samarali ko'chirish uchun ishlatiladi. Quyida lvalue va rvalue references bilan bir necha misollar keltirilgan: #include <iostream> void modify(int& x) { x = x + 10; } int main() { int a = 5; modify(a); // 'a' lvalue sifatida uzatiladi std::cout << "a: " << a << std::endl; // a: 15 return 0; } #include <iostream>
using namespace std; int main() { int a = 10; // 'a' bu L-qiymatli havola, '10' esa R-qiymatli havola int b = 20; // 'b' bu L-qiymatli havola, '20' esa R-qiymatli havola a = b; // Bu yerda 'a' L-qiymatli havola, 'b' esa R-qiymatli havola b = a + 10; // Bu yerda 'b' L-qiymatli havola, 'a + 10' esa R-qiymatli havola cout << "a: " << a << endl; // a: 20 cout << "b: " << b << endl; // b: 30 // Misol sifatida L-qiymatli havolani o'zgartirish a = 15; cout << "a: " << a << endl; // a: 15 // L-qiymatli havola sifatida massiv elementi int arr[3] = {1, 2, 3}; arr[0] = 5; // arr[0] bu L-qiymatli havola cout << "arr[0]: " << arr[0] << endl; // arr[0]: 5 return 0; } Yuqoridagi kodlar C++ da lvalue va rvalue tushunchalarini hamda ularning referenslari bilan ishlashni tushunishga yordam beradi. 2.C++ tilida i-qiymatli va r-qiymatli murojaatlarni farqlash:
C++ tilida lvalue (chap qiymat) va rvalue (o'ng qiymat) tushunchalarini tushunish, ularning farqlarini aniqlash va ularga nisbatan murojaatlar bilan ishlash dasturchilar uchun muhimdir. Quyida lvalue va rvalue tushunchalari, ularni farqlash va murojaat qilish usullari haqida aniq ma'lumot keltirilgan. Funksiya prototiplarini lvalue va rvalue references bilan farqlash va chaqirish: #include <iostream> void print(int& x) { std::cout << "lvalue reference: " << x << std::endl; } void print(int&& x) { std::cout << "rvalue reference: " << x << std::endl; } int main() { int a = 10; print(a); print(20); print(std::move(a)); return 0; }
#include <iostream> #include <vector> using namespace std; void printVector(vector<int>& v) { cout << "L-qiymatli havola: "; for (int n : v) { cout << n << " "; } cout << endl; } void printVector(vector<int>&& v) { cout << "R-qiymatli havola: "; for (int n : v) { cout << n << " "; } cout << endl; } int main() { vector<int> vec = {1, 2, 3, 4, 5}; printVector(vec); // L-qiymatli havola printVector(move(vec)); // R-qiymatli havola