C++11
多了右值引用,今天就來介紹一下右值是什麼囉
右值最直觀的解釋就是等號的右邊,最多一點定義就是沒法取位址
int a = 1; // 1為右值,&取址運算無法取1的位址
那move
的功能就是能把左值轉為右值
,參考以下例子
int tmp = 5;
// C++ 右值引用是&&,可以指向右值,不可指向左值
int &&ref_tmp = move(tmp); // move將左值轉成右值
// 都是輸出5
cout << tmp << endl;
cout << ref_tmp << endl;
move
除了上面提到轉換功能外,主要應用場景是避免拷貝、提升性能
,參考以下例子
vector<string> vec;
string text1 = "abc";
vec.push_back(text1); // 一般用法,會拷貝資料
vec.push_back(move(text1)); // 透過move,可以避免拷貝,但str1就會變空字串
// 變成空字串
cout << "text1: " << text1 << endl;