

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
lvalueとは?左辺値の意味と使い方をやさしく解説
プログラミングを始めたばかりの人にとって、lvalueは少し難しく感じる言葉です。日本語では「左辺値」と言いますが、これは「記憶場所を指す値」という意味です。つまり、メモリ上の特定の場所を指すことができ、そこに新しい値を代入できる値のことを指します。
lvalueとrvalueの違い
同じように使われることが多い lvalue と rvalue の違いをイメージで覚えると理解が進みます。lvalue は「左辺に置ける値」、rvalue は「右辺で現れる値」です。例えば次の式を考えてみましょう。
int x = 5; ここで x は lvalue です。なぜなら x はメモリ上の場所を指し、代入の左辺として使えるからです。一方 5 は rvalue です。5 は値そのものなので、左辺には置けません。
実際のコード例と解説
次の例を見てください。int a = 10; という式では a が左辺値、10 が右辺値です。a に別の値を代入することができるのは lvalue であるためです。
表で整理するとよくわかる
| 用語 | 意味 |
|---|---|
| lvalue | メモリ上の特定のアドレスを持つ値。代入の左辺として使える。 |
| rvalue | 値そのもの。代入の右辺として使われることが多い。 |
| 注意点 | 最近の言語では xvalue / prvalue などの拡張概念もありますが、初学者は「左辺に置けるかどうか」で覚えると迷いが少なくなります。 |
この考え方を使うときのポイント
左辺値は必ず代入の左側に現れること、右辺値は代入の右側に現れることが多い、この基本を覚えれば多くの式の挙動が理解しやすくなります。プログラミング言語によっては「左辺値参照」や「右辺値参照」など、さらなる概念が登場しますが、初心者はまず lvalue と rvalue の区別を身につけるのが近道です。
なぜ lvalue が重要なのか
変数名 や メモリ上の場所 を表す lvalue は、プログラムの状態を操作する際の基盤になります。代入や参照、ポインタの操作、そして関数の引数渡しにも深く関係してきます。lvalue を正しく理解しておくと、デバッグが楽になり、コードの意図も明確になります。
よくある誤解と注意点
初学者が犯しやすい誤解のひとつは、すべての式が「左辺にも右辺にも現れ得る」わけではないという点です。例えば、*ptr はポインタ ptr が指す場所を表す lvalue です。ptr 自体が変数名であれば左辺値として使えます。逆に、数値リテラルのような「5」や「10」は rvalue で、左辺には置けません。
演習問題のヒント
次のような式を考えてみましょう。int a = 3;、int b = 4;、a = b + 1; このときどの値が lvalue で、どの値が rvalue でしょうか。慣れるまで練習するのがコツです。
まとめ
本記事の要点は次のとおりです。lvalue はメモリ上の場所を指す値で、代入の左辺として使える点が特徴です。rvalue は値そのものを指すもので、通常は代入の右辺に現れます。初学者は「左辺に置けるかどうか」という観点で区別すると理解が進みやすいでしょう。
lvalueの同意語
- 左辺値
- lvalueの日本語訳として一般的に使われる表現。代入の左側に置ける値を指し、オブジェクトの実体を参照できる値のこと。
- 左値
- lvalueの別表現。左辺に置ける値を指す用語で、特にC/C++の解説で頻繁に使われます。
- 一般化左辺値
- glvalueの日本語訳。オブジェクトを参照可能な値の総称を指し、アドレスを取れる値を含みます。
- GLvalue
- 一般化左辺値を英語で表した略称。C++などの専門文献で用いられる概念名。
- Left value
- lvalueの英語表現の一つ。左辺に位置する値を指す説明用語として使われます。
- Left-hand value
- 左辺値の英語表現として、left-hand valueと呼ばれることがあります。
lvalueの対義語・反対語
- 右値(右辺値)
- lvalueの対義語。値そのものを表す値のカテゴリで、変数の格納場所を指さず、実体の生成を伴うことが多い。例: 42 や 3.14、a + b の結果など。
- 純右値(prvalue)
- C++11以降の値の分類の一つ。lvalueの対になるカテゴリの一つで、直接的に値を表す。変数を参照先として持たない、純粋な値として扱われることが多い。
- 拡張値(xvalue)
- C++11以降の値の分類の一つ。寿命が間もなく終わる右値の一種で、ムーブ操作の対象として扱われることが多い。
- 一般化左値(glvalue)
- 左値と右値を含む、値の総称的カテゴリ。lvalueはglvalueの一部であり、lvalueとxvalueの両方を含む大カテゴリ。
lvalueの共起語
- 左値
- オブジェクトの記憶場所を指す値のカテゴリ。代入の左側に来る対象となり、アドレスを取得できる。
- 右値
- その場で生成される値や式の評価結果として現れる値。通常は代入先にはならないが、ムーブの対象になることもある。
- lvalue参照
- 左値を参照する型。C++ では int& のように左辺値を束縛する参照。
- rvalue参照
- 右値を参照する型。C++11 以降でムーブ操作に使われる int&& のような参照。
- glvalue
- Generalized Lvalue。左値と移動可能な右値を含む、広い意味の値のカテゴリ。
- prvalue
- Pure Rvalue。値そのものを表すカテゴリ。式の結果として現れる値。
- xvalue
- Expiring Value。ムーブ可能な右値で、資源の所有権を移動させる対象。
- 値カテゴリ
- 値の種類を分類した概念。lvalue、rvalue、glvalue、prvalue、xvalue など。
- lvalue-to-rvalue変換
- 左値を評価して実際の値を取り出す変換。式の評価で値を得るときに発生する。
- 可変左値
- 書き換え可能な左値。代入や変更の対象になる。
- const左値
- const で修飾された左値。変更不可。
- アドレス演算子
- & 演算子。左辺値のアドレスを取得してポインタを得る。
- オブジェクト
- 左値の対象となる実体。データの実体そのもの。
- 変数
- 値を格納する名前付きオブジェクトの代表例。
- メモリ位置
- オブジェクトが格納されている実際の場所を指す概念。
- 代入演算子
- 左辺値に右辺値の値を割り当てる演算子(=など)。
- ムーブセマンティクス
- 資源をコピーせずに移動させる仕組み。xvalueとrvalue参照の組み合わせで実現。
- 一時値
- 生成後すぐに破棄される値。多くは prvalue として扱われる。
- 参照
- 別名として別の値を指す仕組み。lvalue参照・rvalue参照の基礎。
- 評価順序と副作用
- 式の評価順序が lvalue / rvalue の扱いに影響を及ぼすことがある。
- C言語の左辺値
- C 言語における左辺値の概念。C++ とは扱いが異なる点に注意。
lvalueの関連用語
- lvalue
- メモリ上の場所を指す値で、アドレスを取れる。名前付きのオブジェクトを参照することが多く、代入の左辺として使われやすい。
- rvalue
- 一時的な値で、特定の場所を指すオブジェクトではない。右辺として使われることが多い。
- glvalue
- オブジェクトや関数の位置を参照する値の分類。lvalueとxvalueを含み、実体の位置を指し示す性質がある。
- prvalue
- 値そのものを表す式。実体を持つ新しいオブジェクトの初期値として使われ、直接的な場所を指定しない。
- xvalue
- 寿命が終盤に近づくオブジェクトを指すglvalue。通常はムーブ操作の対象となる。
- value category
- 式が表す値の「カテゴリ」を示す概念。現在はglvalueとprvalueという二大分類で、glvalueはさらにlvalueとxvalueを含む。
- lvalue reference
- 型 T& の参照。lvalue に結びつく参照で、元のオブジェクトを直接操作できる。
- rvalue reference
- 型 T&& の参照。rvalue に結びつく参照。ムーブ操作を可能にする。
- const lvalue reference
- 型 const T& の参照。変更不能な参照で、lvalueにもrvalueにも結びつけ可能。
- temporary
- 式の評価中に一時的に生成されるオブジェクト。多くはprvalueの結果として生まれ、文の終わりに破棄される。
- move semantics
- ムーブセマンティクス。リソースをコピーせずに“移動”させ、効率的なオブジェクトの再利用を可能にする。
- address-of operator
- アドレス演算子 & を使ってオブジェクトのメモリアドレスを取得する。
- dereference
- ポインタが指す先のオブジェクトにアクセスする演算子 *。
- lifetime
- オブジェクトが存在し、使用可能な期間。生成時と破棄時に管理される。



















