From d89c1072d4cfd62ca57703e554b7db9cc4c26e47 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Wed, 8 Jun 2022 11:05:41 +0800 Subject: [PATCH] vault backup: 2022-06-08 11:05:41 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/rvalue.md --- 02. PARA/03. Resources(資源)/C++17/rvalue.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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