rvalue 是指: - 等號右邊的值 - 臨時的值,例如運算的結果 - 無法被取址(address-of)的物件 ## rvalue reference 一般的參考只能參考[[lvalue]],如下的程式是ok的: ```cpp int a = 10; int& b = a; ``` 但是像這樣就不行了: ```cpp int a = 10; int b = 5; int& c = a + b; ``` 因為`a+b`是一個rvalue(臨時的值,沒辦法取址),所以無法參考。 但是可以用`&&`來參考rvalue。例如: ```cpp int a = 10; int b = 5; int&& c = a + b; // c = 15 ``` 而不用這樣: ```cpp int a = 10; int b = 5; int r = a + b; int& c = r; ``` 了解rvalue reference之後,就可以實作類別的 move constructor 跟move assignment operator。 ## Move constructor Mov ## 參考 - [Value categories - cppreference.com](https://en.cppreference.com/w/cpp/language/value_category) - [rvalue 參考](https://openhome.cc/Gossip/CppGossip/RvalueReference.html)