通过LLVM源代码想知道我偶然发现了这行代码
MachineInstr *MI = &*I;
我在c ++中有点新手,引用和指针之间的区别对我来说是非常模糊的,我认为它有关于这种差异的一些事情,但这个操作对我没有意义。有没有人对此做出解释?
答案 0 :(得分:8)
I
的类型可能是某种迭代器或智能指针,其中一元operator*()
被重载以产生MachineInstr&
。如果要获取I
引用的对象的内置指针,可以使用*I
获取对象的引用,然后使用&*I
获取此引用的地址。
答案 1 :(得分:2)
C ++允许重新引用dereference运算符,因此它在对象上使用重载方法,然后它将获取结果的地址并将其放入指针。
答案 2 :(得分:2)
本声明:
MachineInstr *MI = &*I;
使用I
取消引用*
,并使用&
获取其结果的地址,然后将其分配给MI
,这是指向MachineInstr
的指针。看起来I
是迭代器,因此*I
是存储在容器中的值,因为迭代器定义*
运算符以在迭代点返回项。容器(例如列表)必须包含MachineInstr
。这可能是std::list<MachineInstr>
。