myClass f() {...}; myClass X,Y; myClass A(X); // 1. myClass B(X+Y); // 2. myClass C(f()); // 3.
2,3 中的 X+Y與f(X) 都會產生一個暫時性的Object,在執行完該行後消失。
因此C++ 11為這種狀況搞了個rvalue, 2,3就屬於rvalue
相對於rvalue的就是lvalue
lvalue: locator value: an object that occupies some identifable location in memory: 在記憶體上佔有一定空間的物件
在 C++ 中有兩種constructor
//copy constructor myClass(myClass const& other){} //move constructor myClass(myClass&& other){}
其中move constructor就是當傳入的是rvalue (myClass&&)的時候可以做一些特殊處理
譬如說,可以把rvalue的記憶體拿來使用,因為這行程式結束之後rvalue也不不存在了
沒有留言:
張貼留言