左辺値、左辺値式、左辺値参照C ++

左辺値と右辺
値1.左辺値:左辺値は、固定アドレスを表すことができるオブジェクトまたは変数です。

int i = 3;//此时,i是个变量,本质和对象一样,是一块内存区域,代表着一个固定的地址。

右辺値:左辺値として使用できないものは、定数、または使用直後に破棄される一時変数または一時オブジェクトの右辺値です。右辺値には固定アドレスがなく、使用後すぐに解放されます。

int i = 1 ; //1 是一个右值,没有固定地址,虽然它也占内存,但用完就被立即释放

ここで、左辺値は同時に右辺値プロパティを持つこともできますが、その逆はできないことに注意する必要があります。

i =i+5;//这里右边的虽然是个左值,但在这里有右值属性,可以理解为取出i的值和1相加构成一个值为(x+1)的常数(或者说临时变量)

アプリケーションケース
これらの演算子は左辺値を使用する必要があり、右辺値を操作することはできません。一般的な例をいくつか示し
ます。代入演算子の左側は左辺値である必要があります。
値記号&

int i = 1;
int* ptr = &i;//这里i必须是个左值

コンテナの添え字[]

string s=“daily coding";
cout<<s[1]<<endl;//这里下标运算符的左边必须是左值

++、---など。これは、演算子が左辺値を使用する必要があるかどうかを確認するための統一された方法です。この演算子がリテラル値を操作できるかどうかを確認します。そうでない場合は、左辺値演算子です。

3++//错误,这种直接操作一个字面量显然不行,所以++是必须运用左值的运算符

左辺
値式と右辺値式式を評価した結果は、左辺値の場合は左辺値式になり、右辺値の場合は右辺値式になります。

int i = 1;
++i = i+2;
//这里左边++i,是返回一个i的变量,但i的值增加了1,所以是左值表达式
//这里i+2是一个右值表达式 ,因为它是一个存了3的临时地址,赋值给i++后就被释放了。

i++ = i + 2//错误,因为i++是一个右值表达式,这里可以理解为 有一个临时对象temp=i;i = i+2;然后返回temp,结果就等于 1  =i+2;

参照分類
左辺値参照
つまり、左辺値にバインドされた参照、左辺値はバインドされている必要があります

int i = 1;
int &ref = i;//这里ref是绑定了i这个左值的引用
int &ref2 = 3;// 3 是右值,无法绑定

右辺値参照右辺値
参照の役割は、開発者に一時変数をバインドする関数を提供することです。これは、右辺値参照記号「&&」を使用して実現できます。

int &&i=1//右值引用可直接引用右值,可以理解为想要给 “ 1 ”一个固定的地址,并给与一个变量名i
i = 3//可以通过i再赋值

Const定数参照は本質的に左辺値参照の一種ですが、2つの違いがあります
。1つは、この参照を介して参照アドレスの値を変更できないこと、もう1つは、右辺値を間接的にバインドできることです(実際には左をバインドします)。価値)

int i = 1const int &ref = 1;
ref = 10;//错误,无法再赋值 ,因为ref是一个常量引用

const int &ref2 = 100//可以引用一个右值,本质上是将100转换为一个变量,再将ref2引用到这个变量上

要約する

1.左辺値は固定アドレスを表すオブジェクトまたは変数であり、固定アドレスのない一時オブジェクトまたは一時変数は両方とも右辺値であり、固定アドレスを表すことはできません
。2.左辺値式は、値が左辺値である式です。 。右辺値式は、値が
右辺値右辺値、実際には左辺値参照である式です)

おすすめ

転載: blog.csdn.net/qq_52302919/article/details/123734314