左值和右值

2021-06-10 06:23:27 字數 786 閱讀 4434

c/c++語言中可以放在賦值符號左邊的變數,即具有對應的可以由使用者訪問的儲存單元,並且能夠由使用者去改變其值的量。或者說左值是代表乙個記憶體位址值,並且通過這個記憶體位址,就可以對記憶體進行讀並且寫(主要是能寫)操作;這也就是為什麼左值可以被賦值的原因了。相對應的還有右值:當乙個符號或者常量放在操作符右邊的時候,計算機就讀取他們的「右值」,也就是其代表的真實值。簡單來說就是,左值相當於位址值,右值相當於資料值。

比如: int ia,ib;

ib=0;

ia=ib;

在這裡,首先定義ia,ib。然後對ib賦值,此時計算機取ib的左值,也就是這個符號代表的記憶體位置即記憶體位址值,計算機取0的右值,也就是數值0;然後給ia賦值為ib,此時取ib的右值給ia的左值;

所以說,ib的左值、右值是根據他的位置來說的;

這也算是形式語言的乙個有意思之處吧。

我的理解:變數才有左值。不是變數的話,就只有右值(比如字串常量值,const變數等)。

變數的左值,可以理解為變數的記憶體位址。

變數既有左值,也有右值。(左值是記憶體位址,右值是變數代表的真實值)

c++ primer 第四版 p101 有一句話:「取位址操作符只能用於左值」

我是這樣理解的:

string s("hello world");

string *sp = &s;

s雖然在賦值操作符的右邊,但是&操作符取的是s的左值,並將這個值賦給sp的左值。

這時,sp的記憶體位址中儲存的是s的左值。

也就是說,sp的右值就是s的位址,即我們常說的:sp指向s。

左值和右值,左值引用和右值引用

左值 lvalue 這一術語 於c語言,用來指代那些可以用在賦值表示式左側的東西,具名物件 在棧和堆上分配的物件,或者其他物件的成員,總之就是又確定儲存空間的東西。而術語右值 rvalue 也是源自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...

左值和右值

左值和右值的區分標準在於能否獲取位址。最早的c 中,左值的定義表示的是可以獲取位址的表示式,它能出現在賦值語句的左邊,對該表示式進行賦值。但是修飾符const的出現使得可以宣告如下的識別符號,它可以取得位址,但是沒辦法對其進行賦值 const int i 10 i 與 i 的主要區別有兩個 1 i ...