注) C++のお話しではないです。C++は、ムーブセマンティクスとかの関係で色々複雑で説明大変なので、Modern Effective C++ のはじめに -> 用語と表記(p.xviii)とか、5章を頑張って読むのが一番近道です!*1
結論)左辺にも右辺にもおける式はlvalue(左辺値)で、右辺にしか置けない式は、rvalue(右辺値)だ!(ただし、C++はまた違う)
- lvalue(左辺値)
メモリのアドレス位置を示す式。左辺値はコンパイル時に判別できる。結果をどこに格納するかという情報だ*2。Cでは、式の左側における。変更可能性の観点から、2つに分類できる:
- 変更不可能な左辺値(const オブジェクト、non-modifiable lvalue)...配列名とか、関数名、文字列リテラル*3
- 変更可能な左辺値(modifiable lvalue)...それ以外だいたい(ポインタ*4はもちろん、変更可能な左辺値)
- rvalue(右辺値)
変数に格納された値や、内容を表す式。文字列リテラル以外の定数式とか。式の右側における。rvalueは、実行時に初めて確定できる値である*5。全てのlvalueはrvalueである。つまり、lvalueは式の右側にも置くことができる。