diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index 303820d..f98875c 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -15,4 +15,14 @@ rvalue reference可以減少無間的複製成本。例如: std::string longStr = "qwertyuiopasdfghjklzxcbnm"; std::string anotherLong = longStr; ``` -這時longStr會被複製一份anotherLong,把longStr換成很大的buffer, \ No newline at end of file +這時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的作法。 + +不過 \ No newline at end of file