在同一指令中引用和解除引用

时间:2012-12-25 23:52:12

标签: c++ pointers reference

通过LLVM源代码想知道我偶然发现了这行代码

MachineInstr *MI = &*I;

我在c ++中有点新手,引用和指针之间的区别对我来说是非常模糊的,我认为它有关于这种差异的一些事情,但这个操作对我没有意义。有没有人对此做出解释?

3 个答案:

答案 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>