操作符重载之解引用与箭头操作符

金融领域必备:Python爬虫+AI量化分析,爬取股票数据并实现智能交易策略 本文通过Python爬虫+AI量化分析的组合,实现了从股票数据爬取到智能交易策略的全流程。免费获取全维度金融数据(行情、财务、舆情),替代付费终端;用LSTM模型捕捉股价的时间序列规律,提升预测精度;基于Backtrader实现策略回测与优化,保证策略的有效性。 阅读详情
箭头操作符与众不同。它可能表现得像二元操作符一样:接受一个对象和一个成员名,对对象解引用以获取成员。不管外表如何,箭头操作符不接受显式形参。这里没有第二个形参,因为 -> 的右操作数不是表达式,相反,是对应着类成员的一个标识符。没有明显可行的途径将一个标识符作为形参传递给函数,相反,由编译器处理获取成员的工作。

理解1
当这样编写时:point->action();由于优先级规则,它实际等价于编写:(point->action)();换句话说,我们想要调用的是对 point->action 求值的结果。编译器这样对该代码进行求值:
1.如果 point 是一个指针,指向具有名为 action 的成员的类对象,则编译器将代码编译为调用该对象的 action 成员。
2.否则,如果 point是定义了 operator-> 操作符的类的一个对象,则 point->action 与 point.operator->()->action相同,即执行point的operator->(),然后使用该结果重复这三步。
3.否则,代码出错。

理解2
箭头操作符,一般都有左右两部分:a->b;如何开始:由a开始,分下面两种情况:
1、a是指针,那么就是我们熟悉的,指向我们a类型的成员数据或函数“b”;到这里,就结束了!
2、a是对象,那么a必须有成员函数"operator->"(否则会报错)。那么就调用a的operator->函数。由于operator->返回的可能是指针,也可能是对象,那么就又进入了下一轮递归:是指针还是对象,走1或2,如此递归。 如何结束:不管a是指针或者对象,最终都是走到指针结束。

理解3
重载箭头操作符必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型对象。
如果返回类型是指针,则内置箭头操作符可用于该指针,编译器对该指针解引用并从结果对象获取指定成员。如果被指向的类型没有定义那个成员,则编译器产生一个错误。
如果返回类型是类类型的其他对象(或是这种对象的引用),则将递归应用该操作符。编译器检查返回对象所属类型是否具有成员箭头,如果有,就应用那个操作符;否则,编译器产生一个错误。这个过程继续下去,直到返回一个指向带有指定成员的的对象的指针,或者返回某些其他值,在后一种情况下,代码出错。

示例
#include <iostream>

using namespace std;

class D
{
     public:
          void info(){cout << "I am D" << endl;}
};

class C
{
     public:
          void info(){cout << "I am C" << endl;}
          D* operator*(){return &m_d;}
          D* operator->(){return &m_d;}

     private:
          D m_d;
};

class B
{
     public:
          void info(){cout << "I am B" << endl;}
          C& operator*(){return m_c;}
          C& operator->(){return m_c;}
     private:
          C m_c;
};

class A
{
     public:
          void info(){cout << "I am A" << endl;}
          C* operator*(){return &m_c;}
          C* operator->(){return &m_c;}
     private:
          C m_c;
};

int main()
{
     A a;
     a->info();
     a->operator->()->info();

     B b;
     b->info();
    
     B *bp = &b;
     bp->info();
     A *ap = &a;
     ap->info();
    
     cout << endl << "deference test" << endl << endl;    
     A da;
     (*da)->info();
     B db;
     (*db)->info();
     (*db).info();
     (**db)->info();
     C dc;
     (*dc)->info();

     return 0;
}

运行结果
I am C
I am D
I am D
I am B
I am A

deference test

I am C
I am D
I am C
I am D
I am D

结果分析
箭头操作符和解引用操作符只有作用在类对象上,才会起重载作用;作用在指针上,按照原始的原生态指针的含义处理。

1、a->info();
首先,a是对象,而且有operator->,调用之,返回C*,是个指针。那么,接下来就是调用函数info,找到对应的C的成员函数。
2、a->operator->()->Print();
a调用“->”返回的C*,是个指针;那么接下来就是调用C的成员函数。后面是个operator->(),正好是C的一个成员函数。
C的operator->返回的是D*,是个指针,那么再调用对应的D的成员函数info();
即“a->operator->()->info()”中的operator->()需要看成一个C的成员函数(正好返回D*,可以调用箭头“->”)就好理解了。
3、b->info();
b是对象,调用operator->返回C对象,那么需要再次递归;C是对象,调用operator->返回D*,那么就是指针,可以走向结束:调用对应的函数info。
4、bp->info();
bp是指针,接下来就是调用函数info,找到对应的B的成员函数
5、ap->info();
ap是指针,接下来就是调用函数info,找到对应的A的成员函数

解引用分析:
6、 (*da)->info();da是A类型的对象,(*da)调用operator*返回指向C类型的指针,后同箭头操作符操作规则;
7、(*db)->info()和(*db).info();db是B的对象(*db)返回指向C类型的对象的引用,即(*db)是一个类型为C的对象,->后同箭头操作符操作规则;.操作符直接调用该对象的成员。
8、(*dc)->info();dc是C类型的对象,(*dc)调用operator*返回指向D类型的指针,后同箭头操作符操作规则;

上面的例子仅仅是为了便于理解解引用操作符和箭头操作符,并没有实用价值。在STL源码中,operator*返回对象的引用,operator->返回对象的指针;此处的对象即对应容器中的元素。
PentAGI自动渗透测试平台搭建与使用 但是PentAGI的缺陷也比较明显,一个是自动化程度高带来过程的介入困难,整个渗透的过程都交给AI自动决策,无法进行人工调整,耗时较长;从上述过程来看PentAGI似乎是一个比较“可用”的AI自动化渗透测试平台,但是在继续等待测试的过程中,PentAGI的一些缺点也暴露了出来,一个是测试的过程非常漫长,因为PentAGI是使用配置大模型API key的方式全自动运行,支持openai、deepseek等主流LLM大模型,过程中不需要人工介入,会不断自动调整,所以比较依赖于大模型本身的响应速度。 阅读详情

相关推荐

关于小样本学习综述论文的总结

对小样本学习综述的个人总结

qq_46176086的博客 5456

【C++ Primer每日一刷之十二】 箭头操作符,条件操作符,sizeof操作符,逗号,优先级

5.6. 箭头操作符 C++ 语言为包含点操作符和解引用操作符的表达式提供了一个同义词:箭头操作符(->)。点操作符(第 1.5.2 节)用于获取类类型对象的成员:   item1.same_isbn(item2); // run thesame_isbn member of item1     如果有一个指向 Sales_item 对象的指针(或迭

poem_of_sunshine的专栏 1600

自动控制原理之控制系统的数学模型(类比神经网络学习数学模型)

控制系统的数学模型背景建模方法常用的数学模型时域数学模型的建立建立微分方程的步骤复数域模型的建立传递函数的性质系统的典型环节及传递函数比例环节惯性环节积分环节微分环节理想微分环节一阶微分环节二阶微分环节振荡环节延时环节(时滞环节) 背景 数学模型就像是真实世界的写照,它就像一个虚拟的世界,我们可以通过建模的方式了解这个真实世界的运作规律。 这一点很像强化学习,强化学习需要一个供智能体探索、学习的环境,于是,我们通常会事先建立一个虚拟的仿真环境。举个例子,对于人类来说,可能需要经过不断地尝试,甚至是生命的代价

zbp_12138的博客 6577

运算符优先级,一网打尽,再也不会疑惑

运算符优先级在这里一次全部搞清楚,不再疑惑

qq_45966201的博客 2526

2024年捡垃圾指南:E5 V3/V4服务器CPU怎么选?从游戏多开到深度学习,附华南X99主板搭配清单

本文详细解析2024年E5 V3/V4服务器CPU的选购策略,涵盖游戏多开、深度学习等多种应用场景。通过对比E5 V3与V4系列的制程、功耗及性能差异,提供高性价比的CPU型号推荐及华南X99主板搭配方案,帮助用户在有限预算下打造高效能工作站。

weixin_42549451的博客 1577

整车无线布置的综述

车载无线功能日益丰富,涵盖5G、GNSS、V2X等多种技术,布置需兼顾性能与美观。车顶是理想位置,鲨鱼鳍、后视镜等集成方案可优化空间。需考虑射频电缆损耗、GNSS天线视角、V2X全向覆盖等关键因素。整车测试需适应高频段需求,通过链路预算和互补天线设计优化信号。不同车型需定制方案,并注意抗干扰和多频段兼容性。(149字)

Godspeed_zwh的博客 1857

c语言优先级.和箭头,C语言运算符优先级等级口诀

圆方括号、箭头一句号,自增自减非反负、针强地址长度,乘除,加减,再移位,小等大等、等等不等,八位与,七位异,六位或,五与,四或,三疑,二赋,一真逗。其中“,”号为一个等级分段。注:“圆方括号、箭头一句号”指的是第15级的运算符。其中圆方括号很明显“()、[]”,箭头 指的是指向结构体成员运算符“->”,句号 指的是结构体成员运算符“.” ;“自增自减非反负、针强地址长度”指的是第14级的运算...

weixin_32458131的博客 1716

Python反爬实战|动态渲染+高可用IP代理集群,稳定爬取京东/淘宝10万+商品数据

做Python电商爬虫的同学,应该都对京东、淘宝的反爬机制深有体会——这两个平台的反爬体系,堪称国内网站的天花板,远比普通资讯、政务网站的反爬严格十倍不止。用requests库请求商品列表,返回的永远是只有骨架的空HTML,商品标题、价格、销量全是前端JS异步加载,抓包分析接口发现参数全是加密的signtoken,解密成本无限高;用selenium开无头浏览器爬取,刚爬3-5页就触发风控,页面直接返回403,IP被封禁,甚至连Cookie都直接失效;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1585

C++知识点43——解引用运算符和箭头运算符的重载及智能指针类的实现

一、概念、 在自定义行为类似指针的类时,需要重载*和->。C++中的智能指针就重载了这两个运算符。->必须是成员函数,*也应该是成员函数。与内置类型保持一致,这两个函数通常都是const的。以为*和->通常不会也不应该改变对象的状态 *运算符的返回值无硬性规则,但是通常都是一个类型的引用 ->运算符的返回值必须是一个类的指针(或者重载了operator->的类的对象)。因为->的作用就是通过对象的指针获取对象的成员 二、示例 通过实现一个智能指针来熟悉这两.

Master Cui的博客 1500

Vue3 - 详解实现网站接入钉钉扫码登录功能,钉钉授权生成登录二维码用户用手机扫描二维码登陆,支持弹框式、浏览器单独新开页显示,钉钉扫描二维码登录详细流程及示例代码,最新vue集成钉钉扫码授权登录!

vue3,nuxt3,钉钉,扫码登录,vue3钉钉扫码登陆,钉钉授权第三方WEB网站扫码登录功能,钉钉扫码登录第三方网站,单点登录,二维码不显示,报错,扫了没反应,出错,vue3钉钉扫码登录,内嵌,获取个人信息,pc网页钉钉登录,钉钉扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描钉钉二维码登录网站,页面弹出一个小窗口而不是打开一个页面,vue3中使用iframe实现另开小窗口扫码登

🏆 前端领域优质创作者 3694

【项目实战】主流车载操作系统,QNX实时操作系统入门介绍

QNX是一种实时操作系统,自1980年代初期由Quantum Software Systems成立以来,已被广泛应用于各种行业和领域。QNX具有实时响应、高可靠性和分布式等特点,为各种设备提供了强大的底层操作系统平台。随着科技的不断发展和进步,QNX系统的应用范围和潜力也在不断扩大。本文将全面介绍QNX系统,包括其引言、背景、系统特性、应用领域和生态系统等方面。QNX作为一种实时操作系统,具有高效的实时性能、高可靠性、分布式、可剪裁性和可扩展性等特点。它在各个领域都有广泛的应用,并拥有一个庞大的生态系统。

奶爸的编程之路,也就一周冷个三天 3068

【C++】运算符重载/函数的返回值为解引用

函数的返回值为解引用?

weixin_52958292的博客 1657

Triton server的部署、构建、backend插件机制代码梳理、模型加载、自定义C++backend流程

Triton inference server的部署、构建、backend机制代码详细梳理、模型加载过程、自定义C++backend流程.

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 473

C++解引用与箭头操作符重载

//class HasPtr class HasPtr { public: //default constructor HasPtr():p(new int) {} //constructor HasPtr(int * i):p(i) {} //copy control HasPtr(cons

所有内容都已迁移到 https://huqijun.org 546

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

关于解引用*和箭头操作符->的重载

这里以一个智能指针类为例,智能指针所指为一个对象。 而事实上,STL迭代器的开发均需要重载这两个操作符,上一篇文章分析STL 迭代器中除了要用到template技巧外,还需要重载技巧 #include<iostream> using namespace std; class Screen { public: friend ostream& operator<<(ostream&os, Screen &s); int action(){

qq_27898413的博客 255

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

解引用和箭头操作符

#include #include "string.h" #include "pointer.h" using namespace std; int main () { String s("xiaocui"); s.display(); String *ps = &s; // 这个是普通的指针,普通的指针容易产生野指针, ps->display(); try { Poin

qq_31248551的博客 991

C++重载箭头操作符

2.ScopedPtr类的构造函数和析构函数(ScopedPtr析构时对实际对象进行自动删除)番外知识点:利用箭头操作符获取成员变量的偏移量(就是内存对齐的偏移量)看cherno的c++ 第46集。1.指针与解引用,点跟箭头的使用。

qq_50877617的博客 188

STL运用的C++技术(5)——重载操作符

STL是C++标准库的重要组成部分之一,它不仅是一个可复用的组件库,更是一个包含算法与数据结构的软件框架,同时也是C++泛型编程的很好例子。STL中运用了许多C++的高级技术。本文介绍重载操作符。主要参考了《C++ Primer》和《STL源码剖析》。        重载操作符是具有特殊名称的函数:保留了operator后接需定义的操作符符号。这是《C++ Primer》中的定义。在STL中

郑亚帅 490

第14章 重载操作符与转换(5)

14.6 成员访问操作符 箭头操作符必须定义为类成员函数。解引用操作符不要求定义为成员,但将它作为成员一般也是正确的。 1. 构建更安全的指针 class ScrPtr { friend class FooPtr; size_t use; Foo *f; ScrPtr(Foo *foo):f(foo),use(1){} ~ScrPtr() { delete f; } };

296

c++重载操作符

#include <iostream> using namespace std; class Screen{ }; class CheckedPtr{ public: // 没有默认构造函数 CheckedPtr(Screen* b,Screen* e):beg(b),end(e),curr(b){} //解引用操作符 * Scree...

weixin_30719711的博客 68

STL运用的C++技术(4)---函数重载

STL是C++标准库的重要组成部分之一,它不仅是一个可复用的组件库,更是一个包含算法与数据结构的软件框架,同时也是C++泛型编程的很好例子。STL中运用了许多C++的高级技术。本文介绍重载操作符。主要参考了《C++ Primer》和《STL源码剖析》。        重载操作符是具有特殊名称的函数:保留了operator后接需定义的操作符符号。这是《C++ Primer》中的定义。在STL中

lvfengchang1220的专栏 391

c++学习-oop-重载成员访问操作符

main.cpp /* Date: 12/03/21 16:01 Description: 重载成员访问操作符 成员访问操作符 解引用操作符:* 用于指针 箭头操作符:-> 用于对象 复习 管理指针成员 定义智能指针类 class Pointer ----> class String */ #include<iostream> #include "string.h" #include "pointer.h" using namespace std

flamesfather的博客 154

c++ premier -- 复制控制与重载操作符

第十三、十四章主要讲了复制控制与操作符重载的相关内容。同时也提供了一些例子说明在某些情况下必须使用以及如何使用自定义的复制控制。 复制构造函数是一种特殊的构造函数,它接受该类类型的引用作为其形参。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用复制构造函数,当将该类型的对象传递给函数或从函数返回该类型的对象时,将隐式使用复制构造函数。 析构函数是构造函数的互补,当对象超出作用域

wolenski的专栏 641

C++:箭头操作符

【代码】C++:箭头操作符。

2201_75903640的博客 466
上一篇: 自旋锁详解
下一篇: RTTI和类型转换
IT_Linux
博客等级 码龄14年 31粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值