同一指令中的引用和解引用
Referencing and dereferencing in the same instruction
在浏览LLVM源代码时,我偶然发现了这行代码
MachineInstr *MI = &*I;
我是c++的新手,引用和指针之间的区别对我来说很模糊,我认为这与这种差异有关,但是这个操作对我来说没有意义。有人能解释一下吗?
I
的类型可能是某种迭代器或智能指针,它将一元operator*()
重载以产生MachineInstr&
。如果你想获得一个内置指针指向I
引用的对象,你可以使用*I
获得对该对象的引用,然后使用&*I
获取该引用的地址。
c++允许重载解引用操作符,因此它在对象上使用了重载的方法,然后它将结果的地址放入指针中。
语句:
MachineInstr *MI = &*I;
用*
对I
解引用,并通过&
获得其结果的地址,然后将其赋值给指向MachineInstr
的指针MI
。看起来I
是一个迭代器,所以*I
是存储在容器中的值,因为迭代器定义了*
操作符在迭代点返回项。容器(如列表)必须包含MachineInstr
。这可能是std::list<MachineInstr>
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 将代码声明放入字中(引用操作符和解引用操作符混淆)
- 指向根的二叉树指针需要被引用和解引用.为什么
- 指针引用和解引用
- c++中指针的递增和解引用顺序
- 理解引用和解引用操作符
- 使用指针和解引用指针按引用传递
- 直接访问变量(而不是使用指针和解引用)会得到不同的值吗?
- 将映射结构强制转换为void指针和解引用
- c++的引用和解引用
- 同一指令中的引用和解引用