2

私は簡単なコードを持っています:

int & i = *(new int(100));

私の知る限り、方程式の右辺は右辺値です.右辺値は左辺値参照にどのようにバインドできますか?

また、これが合法である場合、常に目的の結果が生成されますか、それとも未定義の動作ですか? もし私がそうdelete &iすると、それも未定義の動作になりますか?

4

1 に答える 1

1

割り当ての右側は逆参照されたポインターであり、これは左辺値であるため、左辺値参照をそれにバインドしても問題はありません。標準では、左辺値 (3.10/1) の定義で参照解除されたポインターの例が具体的に示されています。

左辺値 (左辺値は代入式の左側に現れる可能性があるため、歴史的にそう呼ばれています) は、関数またはオブジェクトを指定します。[ 例: E がポインター型の式の場合、*E は、E が指すオブジェクトまたは関数を参照する左辺値式です。別の例として、戻り値の型が左辺値参照である関数を呼び出した結果は、左辺値です。— 終了例 ]

i有効なオブジェクトを参照しているため、未定義の動作はありません。

あなたの質問はここdeleteでカバーされています。

于 2013-11-11T09:49:23.423 に答える