在浏览LLVM源代码时,我偶然发现了这行代码
MachineInstr *MI = &*I;
我是c++的新手,引用和指针之间的区别对我来说很模糊,我认为这与这种差异有关,但是这个操作对我来说没有意义。有人能解释一下吗?
I
的类型可能是某种迭代器或智能指针,它将一元operator*()
重载以产生MachineInstr&
。如果你想获得一个内置指针指向I
引用的对象,你可以使用*I
获得对该对象的引用,然后使用&*I
获取该引用的地址。
c++允许重载解引用操作符,因此它在对象上使用了重载的方法,然后它将结果的地址放入指针中。
语句:
MachineInstr *MI = &*I;
用*
对I
解引用,并通过&
获得其结果的地址,然后将其赋值给指向MachineInstr
的指针MI
。看起来I
是一个迭代器,所以*I
是存储在容器中的值,因为迭代器定义了*
操作符在迭代点返回项。容器(如列表)必须包含MachineInstr
。这可能是std::list<MachineInstr>