关于vs2019 c++ STL 中容器的迭代器的 -> 运算符的使用,以 list 双向链表为例

(1)如下的结构体 A ,若有指针 p = new A() ;则可以使用 p->m , p->n 解引用运算符。
struct A { int m ; int n; }

对于 STL 中提供的迭代器,提供了类似于指针的功能。对迭代器也可以使用 -> 运算符来访问容器中元素对象里的成员。这个功能是由 STL 库大师的源代码实现的,如下图(以 list 容器的迭代器为例):

(2)那么 函数 pointer_to 做了哪些事情呢?以下给出其源码:

可见 ,pointer_to 只是解析了其形参的内存地址。对于全局函数 addressof 就不再展开了,见名知意,就是求形参的地址。

这也符合我们对指针的理解。只要通过指针拿到了对象的首地址,就可以用偏移量来访问类对象中的各个数据成员和函数。

(3)以下给出简单例子的反汇编,看看实际上代码是否是沿以上分析的执行路径:

对应的反汇编代码如下:

在调试中执行反汇编代码,按 F10 ,得输出结果如下:

再来一幅:

谢谢阅读

相关推荐
syagain_zsx15 小时前
ODB 与 MySQL:C++ 里的 ORM 实践(类即表、事务铁律与查询封装)
开发语言·数据库·c++·mysql·工具库·1024程序员节
小鱼仙官15 小时前
使用Qt封装C/C++ 动态库 用于第三方调用
c语言·c++·qt
晚风予卿云月16 小时前
【C++高并发内存池】 1.定长内存池的实现
开发语言·c++·内存管理
闻缺陷则喜何志丹17 小时前
【c++20】协程与屏障
c++·算法·c++20·携程·屏障
会编程的小孩17 小时前
C++ 内存分区、堆与栈、static、union 完整修正版文档
c++
多弗朗皮卡丘18 小时前
C++的类型转换
开发语言·c++
火22518 小时前
# C++ 微服务即时通讯系统(三):网关设计——HTTP 请求、Session 鉴权与 WebSocket 通知上一篇
c++·http·微服务
C++ 老炮儿的技术栈19 小时前
机器人的坐标,像 XYZ 的坐标值,是用单精度浮点还是用双精度浮点?
c语言·c++·人工智能·单片机·c
zaizai100719 小时前
STL深度剖析2
java·c++·算法
幻智星科技19 小时前
FPGA纯硬件UDP桥接:微秒级响应新范式
c++·fpga开发·硬件架构