想知道 LLVM 源代码我偶然发现了这行代码
MachineInstr *MI = &*I;
我是 C++ 中的新手,引用和指针之间的区别对我来说非常模糊,我认为这与这种区别有关,但这个操作对我来说毫无意义。有人对此有解释吗?
of 的类型I
可能是某种迭代器或智能指针,它具有一元operator*()
重载以产生MachineInstr&
. 如果您想获得一个指向所引用对象的内置指针,I
您将获得对该对象的引用 using *I
,然后获取该引用的地址,使用&*I
.
C++ 允许重载解引用运算符,因此它在对象上使用重载方法,然后获取结果的地址并将其放入指针中。
这个说法:
MachineInstr *MI = &*I;
取消引用I
,*
并获取其结果的地址,&
然后将其分配给MI
指向 的指针MachineInstr
。它看起来像是I
一个迭代器,*I
存储在容器中的值也是如此,因为迭代器定义了*
在迭代点返回项目的运算符。容器(例如列表)必须包含一个MachineInstr
. 这可能是一个std::list<MachineInstr>
.