vault backup: 2022-06-08 13:52:41

Affected files:
02. PARA/03. Resources(資源)/C++17/rvalue.md
This commit is contained in:
2022-06-08 13:52:41 +08:00
parent d89c1072d4
commit 58178415c4

View File

@@ -9,20 +9,6 @@ int c{5};
int&& rtepm {c + 3};
```
關於lvalue、rvalue的分別可以參考[Value categories - cppreference.com](https://en.cppreference.com/w/cpp/language/value_category),或是[rvalue 參考](https://openhome.cc/Gossip/CppGossip/RvalueReference.html)等文章。這邊講用法跟好處。
rvalue reference可以減少無間的複製成本。例如
```cpp
std::string longStr = "qwertyuiopasdfghjklzxcbnm";
std::string anotherLong = longStr;
```
這時longStr會被複製一份anotherLong把longStr換成很大的buffer其複製成本就更大了。用rvalue reference可以消除這個複製成本。如下
```cpp
std::string longStr = "qwertyuiopasdfghjklzxcbnm";
std::string&& anotherLong = longStr;
std::cout << anotherLong; // "qwertyuiopasdfghjklzxcbnm"
//std::cout << longStr; // Undefined bahavior, don't do this
```
上面的例子longStr的內容被「轉移」給anotherLong所以不可以再longStr這時候longStr的內容取決於move operator的作法。
不過
## 參考
- [Value categories - cppreference.com](https://en.cppreference.com/w/cpp/language/value_category)
- [rvalue 參考](https://openhome.cc/Gossip/CppGossip/RvalueReference.html)