- 等號右邊的值 - 臨時的值,例如運算的結果 - 無法被取址(address-of)的物件 # rvalue參考 可以用`&&`來參考rvalue。例如: ``` 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的作法。 不過