diff --git a/.obsidian/workspace b/.obsidian/workspace index 5ba4e88..6d6aad3 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "00. TOP/01. TODO.md", + "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "00. TOP/01. TODO.md" + "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "00. TOP/01. TODO.md", + "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,6 +125,7 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "02. PARA/03. Resources(資源)/C++17/rvalue.md", "00. TOP/01. TODO.md", "02. PARA/01. Project(專案)/008. Sentinel.md", "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", @@ -133,7 +134,6 @@ "02. PARA/03. Resources(資源)/99. templates/日記.md", "01. Daily/2022-06-06(週一).md", "02. PARA/03. Resources(資源)/Qt.md", - "02. PARA/03. Resources(資源)/C++17/智慧指標.md", - "02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md" + "02. PARA/03. Resources(資源)/C++17/智慧指標.md" ] } \ No newline at end of file diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index f45517a..303820d 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -1,9 +1,18 @@ - 等號右邊的值 - 臨時的值,例如運算的結果 +- 無法被取址(address-of)的物件 # rvalue參考 -可以用兩個`&`來參考rvalue。例如: +可以用`&&`來參考rvalue。例如: ``` int c{5}; int&& rtepm {c + 3}; -``` \ No newline at end of file +``` + +關於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, \ No newline at end of file