左辺値と右辺値
C++においては、参照が関連してくる時に意識したい事柄
ざっくりとした説明としては
左辺値
「名前がついているもの、寿命が長いもの」
変数
文字列リテラル
返り値の型が左辺値参照である関数の返り値
etc
左辺値参照T&へ束縛できる
右辺値
「名前がついていないもの、一時的なもの」
数値リテラル
コンストラクタの返り値
返り値の型が左辺値参照でない関数の返り値
右辺値参照にキャストされた際に得た値
注: キャストに使った値が右辺値になるのではない
etc
右辺値参照T&&、あるいはconstな左辺値参照const T&へ束縛できる
より詳しくは、次の5種類の値カテゴリがある
基本カテゴリ
lvalue
定義: glvalueのうちxvalueでない式
xvalue
定義: glvalueのうち(寿命がもうすぐ終わるなどの理由で)再利用可能な式
pvalue
定義: その評価によってオブジェクトが初期化されるか、演算子のオペランドを計算する式
複合カテゴリ
glvalue(lvalue+xvalue)
定義: その評価でオブジェクトや関数の特定性を決定する式
rvalue(xvalue+pvalue)
定義: xvalueまたはpvalue