1.1 KiB
1.1 KiB
- 等號右邊的值
- 臨時的值,例如運算的結果
- 無法被取址(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的作法。
不過