当前位置: 首页 > news >正文

C++中的.*运算符

看运算符重载的时候,看到这一句

.*   ::   sizeof   ?:    . 注意以上5个运算符不能重载。

  ::   sizeof   ?:    . 这四个好理解,毕竟都学过,但.*是什么?

于是自己整理了一下

.* 是一种 C++ 中的运算符,称为指针到成员操作符。它用于访问类成员指针所指向的成员变量或成员函数,结合一个对象或对象指针一起使用。

 给段代码

class OB{
public:void func(){cout << "void func()" << endl;}
};typedef void(OB::*PtrFunc)() ;//成员函数指针类型int main(){// 函数指针// void (*ptr)();// 成员函数要加&才能取到函数指针PtrFunc fp = &OB::func;//定义成员函数指针p指向函数funcOB temp;//定义ob类对象temp(temp.*fp)();return 0;
}

前面应该都没问题,直接看到这一句来

	(temp.*fp)();

使用成员函数指针调用 temp 的成员函数 func

temp.*fp 表示:对对象 temp 使用成员函数指针 fp 指向的函数。

所以大概就是用与这种场合?

当然前面提到,这也可以用在成员变量指针上

#include <iostream>
using namespace std;class Test {
public:int x;int y;
};int main() {Test obj;obj.x = 10;obj.y = 20;// 定义成员变量指针int Test::*ptr = &Test::x;// 使用 .* 访问 obj 中的成员变量cout << "Value of x: " << obj.*ptr << endl; // 输出 10// 修改成员变量值obj.*ptr = 100;cout << "Updated x: " << obj.x << endl;    // 输出 100return 0;
}
几点需要注意的地方:

1.成员函数指针 vs 普通函数指针

  • 普通函数指针不能指向成员函数,因为成员函数需要 this 指针来调用,而普通函数没有这个需求。
  • 成员函数指针需要结合对象(如 (temp.*fp))才能使用。

2.取地址时需要加 &

  • 取类成员函数地址时必须加 &,如 &OB::func
  • 普通函数指针可以省略 &

3.调用成员函数时需要通过对象:

  • (temp.*fp)() 是基于对象 temp 来调用的。
  • 如果对象是指针,则需要用 ->* 运算符调用成员函数: 
    OB* objPtr = &temp;
    (objPtr->*fp)();
    

4.成员函数的参数与返回值:

  • 如果成员函数有参数,调用时需要提供实参:
    typedef void(OB::*PtrFuncWithArgs)(int);
    void OB::funcWithArgs(int x) { cout << x << endl; }
    PtrFuncWithArgs fp = &OB::funcWithArgs;
    (temp.*fp)(42); // 输出 42
    
总结
  • 成员函数指针是一种高级功能,常见于框架设计或动态调用类的成员函数。
  • 使用成员函数指针时要结合具体对象,不能像普通函数指针直接调用。

相关文章:

C++中的.*运算符

看运算符重载的时候&#xff0c;看到这一句 .* :: sizeof ?: . 注意以上5个运算符不能重载。 :: sizeof ?: . 这四个好理解&#xff0c;毕竟都学过&#xff0c;但.*是什么&#xff1f; 于是自己整理了一下 .* 是一种 C 中的运算符&#xff0c;称为指针到成…...

大语言模型简史:从Transformer(2017)到DeepSeek-R1(2025)的进化之路

2025年初&#xff0c;中国推出了具有开创性且高性价比的「大型语言模型」&#xff08;Large Language Model — LLM&#xff09;DeepSeek-R1&#xff0c;引发了AI的巨大变革。本文回顾了LLM的发展历程&#xff0c;起点是2017年革命性的Transformer架构&#xff0c;该架构通过「…...

14-H指数

给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她&#xff09;至少发…...

Param ‘serviceName‘ is illegal, serviceName is blank

今天测试nacos服务配置拉取时报了这样一个错误&#xff0c;发现是spring.application.name空值造成的&#xff0c;但是我的bootstrap.yml文件明明配置了&#xff0c;难不成是没有加载bootstrap.yml文件&#xff1f;于是我引入了下面的依赖 <dependency><groupId>o…...

深入剖析Spring MVC

一、Spring MVC 概述 1. 什么是 Spring MVC&#xff1f; Spring MVC 是基于 Spring 框架的 Web 框架&#xff0c;它实现了 MVC 设计模式&#xff0c;将应用程序分为三个核心部分&#xff1a; Model&#xff1a;封装应用程序的数据和业务逻辑。 View&#xff1a;负责渲染数据…...

LLM:RAG

原文链接&#xff1a;LLM&#xff1a;RAG 1、RAG 概览 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;是一种结合了信息检索&#xff08;IR&#xff09;和 LLM 的技术。它的核心思想是在 LLM 生成回答之前&#xff0c;通过检索相关文档…...

Linux 信号量

Linux 信号量 一、信号量基础概念1.1 同步机制的核心需求1.2 信号量的核心原理1.3 信号量类型对比 二、实战代码解析2.1 共享内存与信号量结合示例2.2 信号量类实现要点 三、关键实现细节分析3.1 初始化三步骤3.2 SEM_UNDO机制3.3 原子操作保证 四、进阶应用场景4.1 生产者-消费…...

如何优化Spark作业的性能

优化Spark作业的性能是一个综合性的任务&#xff0c;涉及多个方面的调整和优化。以下是一些关键的优化策略&#xff1a; 一、开发调优 避免创建重复的RDD&#xff1a; 对于同一份数据&#xff0c;只应该创建一个RDD&#xff0c;避免多次创建RDD来增加性能开销。在对不同的数据…...

ERP对制造业务有何价值?

ERP 的定义 在定义 ERP 之前&#xff0c;我们先从其首字母缩写说起&#xff0c;ERP 代表企业资源规划。我们可以将 ERP 定义为一种企业软件&#xff0c;它帮助组织管理日常业务。从根本上讲&#xff0c;ERP 将客户管理、人力资源、商业智能、财务管理、库存以及供应链功能整合…...

python和pycharm 和Anaconda的关系

好的&#xff0c;下面我会详细说明 Python、PyCharm 和 Anaconda 三者的关系&#xff0c;并逐一解释它们的功能和作用。 1. Python&#xff08;编程语言&#xff09; 定义&#xff1a;Python 是一种高级编程语言&#xff0c;设计简洁&#xff0c;易于学习&#xff0c;且功能强…...

网络安全“挂图作战“及其场景

文章目录 一、网络安全挂图作战来源与定义1、网络安全挂图作战的来源2、网络安全挂图作战的定义 二、挂图作战关键技术三、挂图作战与传统态势感知的差异四、挂图作战主要场景五、未来趋势结语 一、网络安全挂图作战来源与定义 1、网络安全挂图作战的来源 网络安全挂图作战的…...

【对比】Pandas 和 Polars 的区别

Pandas vs Polars 对比表 特性PandasPolars开发语言Python&#xff08;Cython 实现核心部分&#xff09;Rust&#xff08;高性能系统编程语言&#xff09;性能较慢&#xff0c;尤其在大数据集上&#xff08;内存占用高&#xff0c;计算效率低&#xff09;极快&#xff0c;利用…...

投资组合风险管理

投资组合风险管理 市场风险 信用风险流动性风险风险指标收益率波动率最大回撤 α \alpha α&#xff08;詹森指数&#xff09;&#xff0c; β \beta β卡玛比率月胜率上/下行捕获比夏普比率索提诺比率经风险调整的收益率&#xff08;&#x1d440;2&#xff09;特雷诺比率信息…...

用 WOW.js 和 animate.css 实现动画效果

用 wow.js 就可以实现动画效果&#xff0c;但由于里面的动画样式太少&#xff0c;一般还会引入 animated.css 第一步&#xff1a;下载 选择合适的包管理器下载对应的内容 pnpm i wow.js animated.css --save 第二步&#xff1a;引入 在main.js中加入&#xff1a; import …...

2024年职高单招或高考计算机类投档线

问题&#xff1a; 这些学校2024年职高单招或高考计算机类投档线分别是多少 回答&#xff1a; 部分学校2024年职高单招或高考计算机类投档线如下&#xff1a; 湖南工业职业技术学院 职高单招&#xff1a;未查询到2024年职高单招计算机类专业明确的录取分数线信息。但在2024年…...

洛谷P11042 [蓝桥杯 2024 省 Java B] 类斐波那契循环数

像是这种填空题的话&#xff0c;就直接暴力还更加省时间&#xff0c;在本地算完后直接提交答案即可 #include<bits/stdc.h> using namespace std;const int N 10000000;bool isnumber(int n) {vector<int> a;int m n;while (n > 0) {a.push_back(n % 10);n / …...

[LeetCode]day25 151.翻转字符串里的单词

题目链接 题目链接 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1a;输入字符串 s中可能…...

2026考研趋势深度解析:政策变化+高效工具指南

2026考研深度解析&#xff1a;趋势洞察高效工具指南&#xff0c;助你科学备战上岸 从政策变化到工具实战&#xff0c;这份千字攻略解决99%考生的核心焦虑 【热点引入&#xff1a;考研赛道进入“高难度模式”】 2025年全国硕士研究生报名人数突破520万&#xff0c;报录比预计扩…...

【软考】【2025年系统分析师拿证之路】【啃书】第十一章 软件需求工程(十二)

目录 需求的层次需求工程的主要活动需求的记录技术需求分析需求定义 需求的层次 业务需求用户需求系统需求 需求工程的主要活动 需求获取需求分析形成需求规格需求确认和验证需求管理 需求的记录技术 任务卡片场景说明用户故事 需求分析 方法&#xff1a; 结构化分析&a…...

Cherry Studio 接入本地ollama 搭建可视化deepseek

本文介绍本地下载ollama 后&#xff0c;在cherry studio 中添加本地ollama 查看本地deepseek 模型列表 ollama list 运行模型 ollama run deepseek-r1 验证可以选用ollama 模型...

MapReduce远程调试

个人博客地址:MapReduce远程调试 | 一张假钞的真实世界 MR的远程调试分为两个方面: MapReduce Task远程调试AM(Application Master)远程调试MapReduce Task远程调试 Map Task远程调试 修改mapred-site.xml中的配置项: mapreduce.map.java.opts:Map Task JVM参数设置。…...

知识拓展:设计模式之装饰器模式

装饰器模式拓展 1. 什么是装饰器模式&#xff1f; 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。装饰器模式通过创建一个装饰类来包装原始类&#xff0c;从而在不修…...

【深度学习】计算机视觉(CV)-目标检测-DETR(DEtection TRansformer)—— 基于 Transformer 的端到端目标检测

1.什么是 DETR&#xff1f; DETR&#xff08;DEtection TRansformer&#xff09; 是 Facebook AI&#xff08;FAIR&#xff09;于 2020 年提出的 端到端目标检测算法&#xff0c;它基于 Transformer 架构&#xff0c;消除了 Faster R-CNN、YOLO 等方法中的 候选框&#xff08;…...

C++ Primer 访问控制与封装

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

LSTM细胞状态门控设计详解:数学原理、代码实现与工业级优化方案

一、数学原理深度解析 1.1 细胞状态更新方程 LSTM通过三个门控机制精确控制细胞状态&#xff1a; 遗忘门&#xff1a;f_t σ(W_f[h_{t-1}, x_t] b_f)输入门&#xff1a; i_t σ(W_i[h_{t-1}, x_t] b_i) C̃_t tanh(W_C[h_{t-1}, x_t] b_C)状态更新&#xff1a;C_t f_…...

hive(hdfs)补数脚本

pb级别迁移通常要持续1个月以上。一般的过程是&#xff0c;全量迁移&#xff0c;追平数据&#xff0c;增量同步&#xff0c;校验&#xff0c;补数。 这里的指定补数脚本&#xff1a; 输入需要补数的表&#xff0c;如Input.txt&#xff0c;如果有分区则加补此分区&#xff0c;没…...

Python学习心得函数

一、函数的定义及调用 1.函数的定义&#xff1a; 函数的定义&#xff1a;函数是将一段能实现某种特定功能的代码&#xff0c;使用函数名进行封装&#xff0c;并通过函数名称进行调用。从而达到一次编写&#xff0c;多次调用的目的。 2.函数类型分为两类&#xff1a; &#…...

RabbitMQ服务异步通信

消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1. 消息可靠性 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一步都可能导致消息丢失&#xff0c;常见的丢失原因包括&#xff1a; 发送时丢失&#xff1a; 生…...

适用于 Windows 仅 0.6MB 且免费无广告的绿色截图工具

软件介绍 YasoCut 可是一款源自 GitHub 的宝藏截图软件&#xff0c;专为 Windows 系统打造&#xff0c;亮点十足。它体积超小&#xff0c;仅有 0.6MB&#xff0c;并且简单易用、免费无广告&#xff0c;还贴心地提供了绿色版本。 这款软件的独特之处在于&#xff0c;和常见截图…...

three.js+WebGL踩坑经验合集(8.2):z-fighting叠面问题和camera.near的坑爹关系

本篇延续上篇内容&#xff1a; three.jsWebGL踩坑经验合集(8.1):用于解决z-fighting叠面问题的polygonOffset远没我们想象中那么简单-CSDN博客 笔者在上篇提到&#xff0c;叠面的效果除了受polygonOffset影响以外&#xff0c;还跟相机的近裁剪面camera.near密切相关&#xff…...

[LeetCode力扣hot100]-链表

相交链表 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 思路就是遍历两个链表&#xff0c;有相同的部分就可以视为相交。 但是长度不一样&#xff0c;比如两个会相交的链表&#xff0c;headA 的长度为 a c&#xff0c;headB 的长度为 b c&#xff0c;其中 c 是公…...

Deepseek官方整理的13类提示词推荐

最近 deepseek 实在是太火了&#xff0c;网上出现了各种大神教你怎么用好它的免费教程&#xff0c;当然也还有各种需要付费才教你怎么用提示词的课程。但我觉得对于使用 AI 来说&#xff0c;根本就不需要教&#xff0c;关键是要理解一条和 AI 沟通的核心原则&#xff1a;和人交…...

hystrix超详细教学

1、什么是hystrix&#xff1f; 是一个做熔断的框架&#xff0c;当程序被高并发访问时可能会造成微服务的宕机&#xff0c;hystrix可以熔断微服务之间通信。防止后台服务发生雪崩。 2、Hystrix作用 熔断查看微服务请求状态 3、Hystrix使用场景 是在微服务架构下才有意义&am…...

Linux的基础指令和环境部署,项目部署实战(下)

目录 上一篇&#xff1a;Linxu的基础指令和环境部署&#xff0c;项目部署实战&#xff08;上&#xff09;-CSDN博客 1. 搭建Java部署环境 1.1 apt apt常用命令 列出所有的软件包 更新软件包数据库 安装软件包 移除软件包 1.2 JDK 1.2.1. 更新 1.2.2. 安装openjdk&am…...

250217-数据结构

1. 定义 数据结构是数据的存储结构&#xff0c;即数据是按某些结构来存储的&#xff0c;比如线性结构&#xff0c;比如树状结构等。 2. 学习意义 数据结构是服务于算法的&#xff0c;为了实现算法的高效计算&#xff0c;所以将数据按特定结构存储。比如使用快速插入或删除的…...

【Java基础】Java数组

前言 在Java编程中&#xff0c;数组是一种非常基础且重要的数据结构。无论你是新手还是有经验的开发者&#xff0c;理解如何有效地使用数组对于编写高效和可维护的代码至关重要。 数组的静态初始化 静态初始化是指在声明数组的同时为其元素赋值。这种方式非常适合于你已经知…...

【拥抱AI】GPT Researcher如何自定义配置LLM

GPT Researcher默认的 LLM&#xff08;大型语言模型&#xff09;和嵌入式模型是 OpenAI&#xff0c;因为其卓越的性能和速度。不过&#xff0c;GPT Researcher 支持各种开源和闭源的 LLM 和嵌入式模型&#xff0c;你可以通过更新 SMART_LLM、FAST_LLM 和 EMBEDDING 环境变量轻松…...

网工项目理论1.7 设备选型

本专栏持续更新&#xff0c;整一个专栏为一个大型复杂网络工程项目。阅读本文章之前务必先看《本专栏必读》。 一.交换机选型要点 制式:盒式交换机/框式交换机。功能:二层交换机/三层交换机。端口密度:每交换机可以提供的端口数量。端口速率:百兆/千兆/万兆。交换容量:交换矩阵…...

扩散模型中的马尔可夫链设计演进:从DDPM到Stable Diffusion全解析

一、技术原理与数学推导&#xff08;附核心公式&#xff09; 1.1 扩散过程数学建模 马尔可夫链前向过程定义&#xff1a; q(x_{1:T}|x_0) \prod_{t1}^T q(x_t|x_{t-1})噪声调度函数&#xff08;以余弦调度为例&#xff09;&#xff1a; \beta_t \frac{1 - \cos(\pi t/T)}…...

游戏引擎学习第112天

黑板&#xff1a;优化 今天的内容是关于优化的&#xff0c;主要讨论了如何在开发中提高代码的效率&#xff0c;尤其是当游戏的帧率出现问题时。优化并不总是要将代码做到最快&#xff0c;而是要确保代码足够高效&#xff0c;以避免性能问题。优化的过程是一个反复迭代的过程&a…...

国鑫DeepSeek 671B本地部署方案:以高精度、高性价比重塑AI推理新标杆

随着DeepSeek大模型应用火爆全球&#xff0c;官方服务器总是被挤爆。而且基于企业对数据安全、网络、算力的更高需求&#xff0c;模型本地化部署的需求日益增长&#xff0c;如何在有限预算内实现高效、精准的AI推理能力&#xff0c;成为众多企业的核心诉求。国鑫作为深耕AI领域…...

【YOLOv8】

文章目录 1、yolov8 介绍2、创新点3、模型结构设计3.1、backbone3.2、head 4、正负样本匹配策略5、Loss6、Data Augmentation7、训练、推理8、分割 Demo附录——V1~V8附录——相关应用参考 1、yolov8 介绍 YOLOv8 是 ultralytics 公司在 2023 年 1 月 10 号开源的 YOLOv5 的下…...

Android - Handler使用post之后,Runnable没有执行

问题&#xff1a;子线程创建的Handler。如果 post 之后&#xff0c;在Handler.removeCallbacks(run)移除了&#xff0c;下次再使用Handler.postDelayed(Runnable)接口或者使用post时&#xff0c;Runnable是没有执行。导致没有收到消息。 解决办法&#xff1a;只有主线程创建的…...

深入解析 Flutter 性能优化:从原理到实践

深入解析 Flutter 性能优化&#xff1a;从原理到实践的全面指南 Flutter 是一个高性能的跨平台框架&#xff0c;但在开发复杂应用时&#xff0c;性能问题仍然可能出现。性能优化是开发高质量 Flutter 应用的关键。本篇博客将从 Flutter 的渲染原理出发&#xff0c;结合实际场景…...

springcloud的组件及作用

Spring Cloud是一个用于构建分布式系统的工具集&#xff0c;它提供了一系列组件来简化微服务架构的开发和部署。以下是一些关键的Spring Cloud组件及其作用&#xff1a; 1. 服务注册与发现 Eureka&#xff1a;Eureka是Spring Cloud中的核心组件之一&#xff0c;用于实现服务注…...

认识Vue3

目录 1. Vue3的优势 2. Vue2 选项式 API vs Vue3 组合式API 使用create-vue搭建Vue3项目 1. 认识create-vue 2. 使用create-vue创建Vue3项目 熟悉Vue3项目目录和关键文件 组合式API - setup选项 1. setup选项的写法和执行时机 2. setup中写代码的特点 组合式API - re…...

Node.js 中的 Event 模块详解

Node.js 中的 Event 模块是实现事件驱动编程的核心模块。它基于观察者模式&#xff0c;允许对象&#xff08;称为“事件发射器”&#xff09;发布事件&#xff0c;而其他对象&#xff08;称为“事件监听器”&#xff09;可以订阅并响应这些事件。这种模式非常适合处理异步操作和…...

【JavaEE进阶】MyBatis通过注解实现增删改查

目录 &#x1f343;前言 &#x1f340;打印日志 &#x1f334;传递参数 &#x1f38b;增(Insert) &#x1f6a9;返回主键 &#x1f384;删(Delete) &#x1f332;改(Update) &#x1f333;查(Select) &#x1f6a9;起别名 &#x1f6a9;结果映射 &#x1f6a9;开启驼…...

【GESP C++三级考试考点详细解读】

GESP C三级考试考点解读及洛谷OJ练习题单 1. 数据编码&#xff08;原码、反码、补码&#xff09; 考点解读&#xff1a; 理解计算机中数值的二进制表示方式&#xff0c;包括原码&#xff08;符号位绝对值&#xff09;、反码&#xff08;符号位不变&#xff0c;其余位取反&…...

算法——舞蹈链算法

一&#xff0c;基本概念 算法简介 舞蹈链算法&#xff08;Dancing Links&#xff0c;简称 DLX&#xff09;是一种高效解决精确覆盖问题的算法&#xff0c;实际上是一种数据结构&#xff0c;可以用来实现 X算法&#xff0c;以解决精确覆盖问题。由高德纳&#xff08;Donald E.…...