同一指令中的引用和解引用



在浏览LLVM源代码时,我偶然发现了这行代码

MachineInstr *MI = &*I;

我是c++的新手,引用和指针之间的区别对我来说很模糊,我认为这与这种差异有关,但是这个操作对我来说没有意义。有人能解释一下吗?

I的类型可能是某种迭代器或智能指针,它将一元operator*()重载以产生MachineInstr&。如果你想获得一个内置指针指向I引用的对象,你可以使用*I获得对该对象的引用,然后使用&*I获取该引用的地址。

c++允许重载解引用操作符,因此它在对象上使用了重载的方法,然后它将结果的地址放入指针中。

语句:

MachineInstr *MI = &*I;

*I解引用,并通过&获得其结果的地址,然后将其赋值给指向MachineInstr的指针MI。看起来I是一个迭代器,所以*I是存储在容器中的值,因为迭代器定义了*操作符在迭代点返回项。容器(如列表)必须包含MachineInstr。这可能是std::list<MachineInstr>

最新更新