私は簡単なコードを持っています:
int & i = *(new int(100));
私の知る限り、方程式の右辺は右辺値です.右辺値は左辺値参照にどのようにバインドできますか?
また、これが合法である場合、常に目的の結果が生成されますか、それとも未定義の動作ですか? もし私がそうdelete &i
すると、それも未定義の動作になりますか?
割り当ての右側は逆参照されたポインターであり、これは左辺値であるため、左辺値参照をそれにバインドしても問題はありません。標準では、左辺値 (3.10/1) の定義で参照解除されたポインターの例が具体的に示されています。
左辺値 (左辺値は代入式の左側に現れる可能性があるため、歴史的にそう呼ばれています) は、関数またはオブジェクトを指定します。[ 例: E がポインター型の式の場合、*E は、E が指すオブジェクトまたは関数を参照する左辺値式です。別の例として、戻り値の型が左辺値参照である関数を呼び出した結果は、左辺値です。— 終了例 ]
i
有効なオブジェクトを参照しているため、未定義の動作はありません。
あなたの質問はここdelete
でカバーされています。