《c++ primer》p121
當乙個物件被用作右值的時候,用的是物件的值(內容);到目前位置,已經有幾種我們熟悉的運算子是要用到左值的。當物件被用作左值的時候,用的是物件的身份(在記憶體中的位置)
乙個重要的原則:
在需要右值的地方可以用左值來代替,但是不能把右值當成左值(也就是位置)使用。
當乙個左值被當成右值使用時,實際使用的是它的內容(值)
對於關鍵字decltype
如果表示式的求值結果是左值,decltype作用於該表示式得到乙個引用型別
int i = 0;
int *p = &i;
decltype(*p) p1 = i;//p1為int&型別
因為取位址符(&)生成右值,所以decltype(&p)的結果式int**,結果是乙個指向整型指標的指標
int i = 0;
int *p = &i;
decltype(&p) p2 = &p;//p2為int**型別
左值和右值,左值引用和右值引用
左值 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...