Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2025 / oop-notes / index.du
blob: c3641fa790473c222e10a3ca83c93c941acff937 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Бележки по ООП при C++ - ООП, КН, 2025-2026

'define expected-reading 2 min
'define created 18 March 2026
'define edited 18 March 2026
[$pagenav]

Този документ съдържа редица полезна информация и детайли относно обектно-ориентираното програмиране при C++.

## Голяма петица формат

```c++
'include ./RuleOfFive.cpp

## [`&&A`], rvalue и rvalue reference

[`lvalue`] е всяка стойност, която има "име".
Това са аргументи на функции, променливи, ...

[`rvalue`] е всяка стойност за която нямаме "име".
Най-често срещаните са върнатите стойноти от функция/оператор.
Тези стойности са временни и идеята е че ще бъдат изтрити (и на практика, данните им ще бъдат копирани/пренесени в нещо с име, [`lvalue`]).

Можем да правим референции върху [`rvalue`]:
```c++
A&& rvalueRef = functionWhichReturnsA();

Обаче, тези референции дават (временно) име към [`rvalue`]-то.
Това означава, че те самите стават [`lvalue`].

Поради тази прична не можем да имаме повече от една [`rvalue`] референция към едно [`rvalue`]:
```c++
A&& ref1 = functionWhichReturnsA();
A&& ref2 = ref1; // Грешка!

И не можем да подаваме аргумент [`rvalue`] на друга функция:
```c++
void foo(A&& ref1) {
    ...
}
void bar(A&& ref2) {
    foo(ref2); // Грешка!
}

\n\n
[*Съпътстващи ресурси:*]
.bulleted
- [url https://web.archive.org/web/20200627194253/https://thbecker.net/articles/rvalue_references/section_05.html https://thbecker.net/articles/rvalue_references/section_05.html]