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}
|