1. 程式人生 > >c++中左值右值的區分

c++中左值右值的區分

左值右值來自於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是一個左值