Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2025 / oop-notes / index.du
blob: 4b11a5d25068249d0ff7dea2352ab6b6a99d4c4d (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
'def title Бележки по ООП при C++ - ООП, КН, 2025-2026
'def  desc Полезна информация и детайли относно обектно-ориентираното програмиране при C++

# {title}

{pagenav 2 min;18 March 2026;18 March 2026}

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

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

```cpp
'snippet 1 $ ./RuleOfFive.cpp

## {` &&A}, rvalue и rvalue reference

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

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

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

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

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

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

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