左辺値と右辺値
すべての C++ の式は左辺値または右辺値です。左辺値一つの式に保持するオブジェクトを示します。名前のオブジェクトには左辺値と考えることができます。すべての変数は()const 変更できない変数が左辺値です。rvalue を使用する式に保持されない一時値です。より左辺値と右辺値の違いを理解するために次の例を考えてみてください :
// lvalues_and_rvalues1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
int x = 3 + 4;
cout << x << endl;
}
この例ではx はを定義する式に保持されるので左辺値です。プロシージャを定義する式に保持されないため一時的な値に評価される式 3 + 4 は右辺値です。
次の例では左辺値と右辺値の複数の正しい不適切な使用法を示しています :
// lvalues_and_rvalues2.cpp
int main()
{
int i, j, *p;
// Correct usage: the variable i is an lvalue.
i = 7;
// Incorrect usage: The left operand must be an lvalue (C2106).
7 = i; // C2106
j * 4 = 7; // C2106
// Correct usage: the dereferenced pointer is an lvalue.
*p = i;
const int ci = 7;
// Incorrect usage: the variable is a non-modifiable lvalue (C3892).
ci = 9; // C3892
// Correct usage: the conditional operator returns an lvalue.
((i < 3) ? i : j) = 7;
}
[!メモ]
このトピックの例では演算子をオーバーロード過ぎられないと正しく不適切な使用について説明します。演算子をオーバーロードすることによりj * 4 のような式の左辺値ができます。
オブジェクト参照を参照するという用語の 左辺値 と 右辺値 がよく使用されます。参照の詳細については左辺値参照宣言子: と と 右辺値参照宣言子: && を参照してください。