Files
Obsidian-Main/02. PARA/03. Resources(資源)/C++17/rvalue.md
Awin Huang d89c1072d4 vault backup: 2022-06-08 11:05:41
Affected files:
02. PARA/03. Resources(資源)/C++17/rvalue.md
2022-06-08 11:05:41 +08:00

1.1 KiB
Raw Blame History

  • 等號右邊的值
  • 臨時的值,例如運算的結果
  • 無法被取址address-of的物件

rvalue參考

可以用&&來參考rvalue。例如

int c{5};
int&& rtepm {c + 3};

關於lvalue、rvalue的分別可以參考Value categories - cppreference.com,或是rvalue 參考等文章。這邊講用法跟好處。 rvalue reference可以減少無間的複製成本。例如

std::string longStr = "qwertyuiopasdfghjklzxcbnm";
std::string anotherLong = longStr;

這時longStr會被複製一份anotherLong把longStr換成很大的buffer其複製成本就更大了。用rvalue reference可以消除這個複製成本。如下

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的作法。

不過