用語右辺値 は、メモ リー内のいずれかのアドレスに保管されるデータ値のことです。 右辺値は、それに代入する値を持つことができない式です。リテラル定数および変数は両方とも、右辺値として使用できます。 右辺値を必要とするコンテキストで左辺値が現れると、左辺値は暗黙的に右辺値に 変換されます。 しかし、その逆は行われません。つまり、右辺値は左辺値に変換されません。 右辺値は常に、完全型または void 型を持っています。
C では、関数指定子 が関数型を持つ式として定義されます。関数指定子は、オブジェクト型または左辺値とは異なります。関数指定子は関数の名前、または関数ポインターを間接参照した結果を使 用できます。 C 言語でも、その関数ポインターとオブジェクト・ポインターの処理を区別しています。
一方 C++ では、参照を戻す関数呼び出しは左辺値です。それ以外の場合、関数呼び出しは右辺値式です。C++ では、式はすべて左辺値または右辺値を生成するか、値をまったく生成しません。
演算子 | 要件 |
---|---|
& (単項) | オペランドは、左辺値でなければなりません。 |
++ -- | オペランドは、左辺値でなければなりません。 これは、接頭部と接尾部の両方の形式に適用されます。 |
= += -= *= %= <<= >>= &= ^= |= | 左方オペランドは左辺値である必要があります。 |
例えば、すべての代入演算子は、それらの右方オペランドを評価し、その値を左方オペランドに代入します。 左方オペランドは、変更可能な左辺値、または変更可能なオブジェクトへの参照である必要があります。
式 | 左辺値 |
---|---|
x = 42 | x |
*ptr = newvalue | *ptr |
a++ | a |
int& f() | f() への関数呼び出し |