c++中左值右值的區分
阿新 • • 發佈:2019-01-22
左值右值來自於c語言。
左值:用來指代可以用在賦值表示式作則的東西,具體命名的物件、在記憶體中棧和堆上分配的物件,或者其他物件成員,總之就是有確定儲存空間的東西。
右值:指的是隻能在賦值表示式右側出現的東西,如字面值和臨時物件。
左值引用只能被繫結到左值,不能被繫結到右值:
int a = 1;
int &b = a;//正確,因為a是一個左值
int &c = 5;//錯誤,因為5是一個字面值,是右值
但是一直能夠將一個右值繫結到const左值引用上:
int const &d= 100;//正確
這個特殊的設定是為了能將臨時物件作為引用引數傳遞給函式,:
void reverse(srd::string const &str) {return;} reverse(“HowAreYou”);//正確,這是一個將臨時物件隱式的轉換成一個左值引用。 void reverse(std::string &str) {retrun;} reverse(“hello”); //error:invalidinitialization of non-const reference of type …
但是在標準中只有繫結到右值,而不能繫結到左值的右值引用:
int&& a = 0;//右值引用,宣告正確
int b = 1;
int && c = b;//錯誤,因為b是一個左值