int x = 8;
int y = x ;
ここで、左辺値を右辺値としてどのように機能させることができますか?これがばかげた質問であることは知っていますが、右辺値と左辺値の概念を明確にしたいと思います。
左辺値から右辺値への変換を介して。
左辺値は、右辺値が必要なほとんどの場所で使用でき、暗黙的な左辺値から右辺値への変換が自動的に行われます。
非公式には、この変換は、左辺値が参照するオブジェクトの「評価」または「値の取得」です。これはすべての場合に厳密に当てはまるわけではありません。のオペランドなどの未評価のコンテキストでsizeof
は、オブジェクトの値は使用されません。
ISO/IEC 14882:2011 4.1 [conv.lval]:
非関数型、非配列型の glvalue (3.10) は、
T
prvalue に変換できます。T
が不完全な型の場合、この変換を必要とするプログラムは形式が正しくありません。glvalue が参照するオブジェクトが型のオブジェクトでT
はなく、 から派生した型のオブジェクトでもT
ない場合、またはオブジェクトが初期化されていない場合、この変換を必要とするプログラムの動作は未定義です。T
が非クラス型の場合、prvalue の型は の cv 非修飾バージョンですT
。それ以外の場合、prvalue の型は ですT
。
左辺値は、割り当ての左側に表示できる任意の値です。x
この場合の変数のように、代入できるもの。右辺値は、値を持つもの、8
または値を取得するものですx
。左辺値は、右辺値のサブセットと考えることができます。つまり、すべての左辺値は、値を照会して右辺値として使用できます。