主要整理與http://c.biancheng.net/view/7829.html 和 《c++primer》
左值和右值
- 左值可以位于賦值語句左側(cè),右值則不能
- 當(dāng)一個對象被用作右值的時候虑椎,用的是對象的值(內(nèi)容)宾抓;當(dāng)對象被用作左值的時候嗤无,用的是對象的身份(在內(nèi)存中的位置)。
右值 :要么是常量姚建,要么是在表達(dá)式求值過程中創(chuàng)建的臨時對象
左值引用和右值引用
- 左值引用: &
int num = 10;
int &b = num; //左值引用
int &c = 10; //錯誤迁央,無法對右值添加左值引用
//但是可以對 右值添加常量左值引用。也就是說纠屋,常量左值引用既可以操作左值,也可以操作右值
const int &e = num;
const int &f = 10;
- 右值引用:&&
右值引用:右值往往是沒有名稱的盾计,因此要使用它只能借助引用的方式售担。這就產(chǎn)生一個問題,實際開發(fā)中我們可能需要對右值進(jìn)行修改(實現(xiàn)移動語義時就需要)署辉,顯然左值引用的方式是行不通的族铆。
int num = 10;
int && b = num; //錯誤,右值引用不能初始化為左值哭尝,可用以下做法
int && c = std::move(num); //move()::將左值轉(zhuǎn)換成右值
int && d = 10;
a = 100; //右值引用可以修改右值
const int&& e = 10;//也可以定義常量右值引用
右值引用常用于 :移動語義和完美轉(zhuǎn)發(fā)