Bitnabour rvalue vs lvalueなどについて話す必要があります。
まず、基本から始めましょう。C ++では、LValueはメモリの位置を指す式であり、RValueは一部のメモリ位置に保存された値を表す式です。簡単ですよね？しかし、待って、もっとあります。

rvaluesとlvaluesの主な違いの1つは、rvaluesに値を割り当てることができないが、lvaluesができることです。これは、LValueが変更できるメモリ位置であるのに対し、RValueはメモリに保存され、変更できない値にすぎないためです。それは定数の値を変更しようとするようなものです - それは起こりません。

しかし、ここで物事がもう少し複雑になります。場合によっては、rvalueを暗黙的にlvalueに変換することができます。たとえば、参照ごとに引数を取得する関数があり、RValueを渡す場合、コンパイラは暗黙的に一時オブジェクトを作成し、そのオブジェクトへの参照をバインドします。これにより、一時的なオブジェクトを変更することができ、これにより元のRValueが変更されます。混乱していますよね？

そして、それはそれの半分でさえありません。また、C ++ 11で導入されたRValue参照もあります。RValueリファレンスは、RValueにのみ結合できる参照です。これにより、内容をコピーするのではなく、RValueの内容を新しいオブジェクトに移動できます。これは、大きな配列や複雑なデータ構造など、コピーに費用がかかるオブジェクトに特に役立ちます。

しかし、待ってください、まだもっとあります。場合によっては、rvalueの参照はLValueに結合することもありますが、LValueが破壊されようとしている場合のみです。これは「期限切れ」の参照として知られており、LValuesを扱う場合でもMove Semanticsを利用することができます。

そのため、要約すると、RValuesはメモリの位置に保存されている値を表す式であり、LValuesはメモリの位置を参照する式です。rvaluesに値を割り当てることはできませんが、lvaluesはできます。ただし、場合によっては、rvaluesを暗黙的にlvalueに変換することができ、RValueの内容を使用してRValueの内容を新しいオブジェクトに移動できます。そして、それが十分に混乱していなかった場合、RValue参照は特定の状況でもLValuesに結合することができます。

そこにあなたはそれを持っています -  c ++のrvalueとlvalueの説明。これがあなたのために物事を片付けることを願っています。またはそうでないかもしれません。知るか？結局のところ、それはC ++です。