5

LLVMソースコードを調べて、このコード行に出くわしました

MachineInstr *MI = &*I;

私はC++の初心者であり、参照とポインターの違いは私にはまったくわかりません。この違いには何か関係があると思いますが、この操作は私には意味がありません。誰かがそれをするための説明がありますか?

4

3 に答える 3

8

のタイプは、おそらく、単項オーバーロードされて。を生成する、Iある種のイテレータまたはスマートポインタです。によって参照されるオブジェクトへの組み込みポインターを取得する場合は、を使用してオブジェクトへの参照を取得してから、を使用してこの参照のアドレスを取得します。operator*()MachineInstr&I*I&*I

于 2012-12-25T23:54:34.913 に答える
2

C ++では、間接参照演算子のオーバーロードが許可されているため、オブジェクトでオーバーロードされたメソッドを使用し、結果のアドレスを取得してポインターに入れます。

于 2012-12-25T23:54:21.637 に答える
2

この文:

MachineInstr *MI = &*I;

で逆参照I*、で結果のアドレスを取得してから、へのポインタであるアドレスを&割り当てます。イテレータのように見えますが、イテレータは反復ポイントでアイテムを返す演算子を定義するため、コンテナに格納されている値も同様です。コンテナ(リストなど)には、が含まれている必要があります。これはである可能性があります。MIMachineInstrI*I*MachineInstrstd::list<MachineInstr>

于 2012-12-25T23:55:24.263 に答える