5

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

MachineInstr *MI = &*I;

我是 C++ 中的新手,引用和指针之间的区别对我来说非常模糊,我认为这与这种区别有关,但这个操作对我来说毫无意义。有人对此有解释吗?

4

3 回答 3

8

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

于 2012-12-25T23:54:34.913 回答
2

C++ 允许重载解引用运算符,因此它在对象上使用重载方法,然后获取结果的地址并将其放入指针中。

于 2012-12-25T23:54:21.637 回答
2

这个说法:

MachineInstr *MI = &*I;

取消引用I*并获取其结果的地址,&然后将其分配给MI指向 的指针MachineInstr。它看起来像是I一个迭代器,*I存储在容器中的值也是如此,因为迭代器定义了*在迭代点返回项目的运算符。容器(例如列表)必须包含一个MachineInstr. 这可能是一个std::list<MachineInstr>.

于 2012-12-25T23:55:24.263 回答