45 lines
922 B
Markdown
45 lines
922 B
Markdown
rvalue 是指:
|
||
- 等號右邊的值
|
||
- 臨時的值,例如運算的結果
|
||
- 無法被取址(address-of)的物件
|
||
|
||
## rvalue reference
|
||
一般的參考只能參考[[lvalue]],如下的程式是ok的:
|
||
```cpp
|
||
int a = 10;
|
||
int& b = a;
|
||
```
|
||
|
||
但是像這樣就不行了:
|
||
```cpp
|
||
int a = 10;
|
||
int b = 5;
|
||
int& c = a + b;
|
||
```
|
||
|
||
因為`a+b`是一個rvalue(臨時的值,沒辦法取址),所以無法參考。
|
||
但是可以用`&&`來參考rvalue。例如:
|
||
```cpp
|
||
int a = 10;
|
||
int b = 5;
|
||
int&& c = a + b; // c = 15
|
||
```
|
||
|
||
而不用這樣:
|
||
```cpp
|
||
int a = 10;
|
||
int b = 5;
|
||
int r = a + b;
|
||
int& c = r;
|
||
```
|
||
|
||
了解rvalue reference之後,就可以實作類別的 move constructor 跟move assignment operator。
|
||
|
||
## Move constructor
|
||
Mov
|
||
|
||
|
||
|
||
## 參考
|
||
- [Value categories - cppreference.com](https://en.cppreference.com/w/cpp/language/value_category)
|
||
- [rvalue 參考](https://openhome.cc/Gossip/CppGossip/RvalueReference.html) |