左值和右值的區分標準在於能否獲取位址。
最早的c++中,左值的定義表示的是可以獲取位址的表示式,它能出現在賦值語句的左邊,對該表示式進行賦值。但是修飾符const的出現使得可以宣告如下的識別符號,它可以取得位址,但是沒辦法對其進行賦值:
const int& i = 10;
i++ 與 ++i 的主要區別有兩個
1、 i++ 返回原來的值,++i 返回加1後的值
2、 i++ 不能作為左值,而++i 可以
首先解釋下什麼是左值,左值是對應記憶體中有確定儲存位址的物件的表示式的值,而右值是所有不是左值的表示式的值。一般來說,左值是可以放到賦值符號左邊的變數。但能否被賦值不是區分左值與右值的依據。比如,c++的const左值是不可賦值的;而作為臨時物件的右值可能允許被賦值。左值與右值的根本區別在於是否允許取位址&運算子獲得對應的記憶體位址。比如,int i = 0;
int *p1 = &(++i); //正確
int *p2 = &(i++); //錯誤
++i = 1; //正確
i++ = 5; //錯誤
i++ 最後返回的是乙個臨時變數,而臨時變數是右值。
左值和右值,左值引用和右值引用
左值 lvalue 這一術語 於c語言,用來指代那些可以用在賦值表示式左側的東西,具名物件 在棧和堆上分配的物件,或者其他物件的成員,總之就是又確定儲存空間的東西。而術語右值 rvalue 也是源自c語言,指的是只能在賦值表示式右側出現的東西,如字面值和臨時物件。只能繫結到左值,不能繫結到右值的引用...
左值和右值
c c 語言中可以放在賦值符號左邊的變數,即具有對應的可以由使用者訪問的儲存單元,並且能夠由使用者去改變其值的量。或者說左值是代表乙個記憶體位址值,並且通過這個記憶體位址,就可以對記憶體進行讀並且寫 主要是能寫 操作 這也就是為什麼左值可以被賦值的原因了。相對應的還有右值 當乙個符號或者常量放在操作...
左值和右值
參考 左值就是在賦值中可以放在賦值操作符兩邊的值,比如 int a 1 double b 2.0 a b b a 這裡a和b都是左值,一切變數都是左值,但const量是例外。而右值則是只可以放在賦值操作符右邊的值,比如 int a 0 char b hello 3 a error howdy b e...