Cにおけるlvalue(左辺値)、rvalue(右辺値)

注) 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は式の右側にも置くことができる。

*1:間違ってたらごめんね(/ω\) 指摘していただければ幸いです_(._.)_

*2:エキスパート C プログラミング p.115

*3:ダブルクォーテーションで囲まれた文字列

*4:ここからも、配列とポインタは違うものだということがわかる

*5:エキスパート C プログラミング p.115