C++类与对象进阶知识深度解析
目录
一、再谈构造函数
(一)构造函数体赋值
(二)初始化列表
(三)成员变量初始化顺序
(四)explicit关键字
二、static成员
(一)概念
(二)特性
(三)相关问题思考
三、友元
(一)友元函数
(二)友元类
一、再谈构造函数
(一)构造函数体赋值
在C++中,创建对象时,编译器会调用构造函数为对象的成员变量赋初始值。以 Date 类为例:
cppclass Date{public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}private:int _year;int _month;int _day;};
这里看似是初始化,实则是赋值。真正的初始化只能进行一次,而构造函数体内可以多次赋值。比如先创建对象,再多次调用成员函数修改成员变量的值。
(二)初始化列表
初始化列表以冒号开始,后面跟着逗号分隔的成员变量初始化表达式。还是以 Date 类为例:
cppclass Date{public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}private:int _year;int _month;int _day;};
使用初始化列表有诸多好处。首先,对于一些成员变量,如引用成员变量、 const 成员变量以及没有默认构造函数的自定义类型成员变量,必须使用初始化列表进行初始化。例如:
cppclass A{public:A(int a) : _a(a) {}private:int _a;};class B{public:B(int a, int& ref): _aobj(a), _ref(ref), _n(10){}private:A _aobj; // 没有默认构造函数int& _ref; // 引用const int _n; // const};
其次,使用初始化列表效率更高。因为对于自定义类型成员变量,即使在构造函数体中赋值,编译器也会先使用默认构造函数初始化,再进行赋值操作,而初始化列表可以直接调用合适的构造函数初始化。
(三)成员变量初始化顺序
成员变量在类中声明的次序就是其在初始化列表中的初始化顺序,与在初始化列表中书写的先后次序无关。例如:
cppclass A{public:A(int a): _a1(a), _a2(_a1){}void Print() {std::cout << _a1 << " " << _a2 << std::endl;}private:int _a2;int _a1;};int main() {A aa(1);aa.Print();return 0;}
这里先初始化 _a2 ,再初始化 _a1 ,所以输出结果可能不是预期的 1 1 ,而是 1 随机值 。
(四)explicit关键字
对于接收单个参数的构造函数,除了构造对象外,还具有类型转换的作用。但有时候我们不希望这种隐式类型转换发生,就可以使用 explicit 关键字。比如 Date 类:
cppclass Date{public:// 单参构造函数,没有使用explicit修饰,具有类型转换作用// explicit修饰构造函数,禁止类型转换,去掉explicit后,代码可以通过编译explicit Date(int year):_year(year){}// 虽然有多个参数,但是创建对象时后两个参数可以不传递,没有使用explicit修饰,具有类型转换作用// explicit修饰构造函数,禁止类型转换explicit Date(int year, int month = 1, int day = 1): _year(year), _month(month), _day(day){}Date& operator=(const Date& d){if (this!= &d){_year = d._year;_month = d._month;_day = d._day;}return *this;}private:int _year;int _month;int _day;};void Test(){Date d1(2022);// 用一个整形变量给日期类型对象赋值// 实际编译器背后会用2023构造一个无名对象,最后用无名对象给d1对象进行赋值d1 = 2023; // 将1屏蔽掉,放开时则编译失败,因为explicit修饰构造函数,禁止了单参构造函数类型转换的作用}
使用 explicit 修饰后,就禁止了构造函数的隐式类型转换,提高了代码的可读性和安全性。
二、static成员
(一)概念
在C++中,用 static 修饰的类成员称为类的静态成员。用 static 修饰的成员变量称为静态成员变量,用 static 修饰的成员函数称为静态成员函数。静态成员变量一定要在类外进行初始化。
例如,要实现一个类来计算程序中创建了多少个类对象:
cppclass A{public:A() { ++_scount; }A(const A& t) { ++_scount; }~A() { --_scount; }static int GetACount() { return _scount; }private:static int _scount;};int A::_scount = 0;void TestA(){std::cout << A::GetACount() << std::endl;A a1, a2;A a3(a1);std::cout << A::GetACount() << std::endl;}
这里 _scount 是静态成员变量,记录对象个数, GetACount 是静态成员函数,用于获取对象个数。
(二)特性
1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区。
2. 静态成员变量必须在类外定义,定义时不添加 static 关键字,类中只是声明。
3. 类静态成员既可用 类名::静态成员 或者 对象.静态成员 来访问。
4. 静态成员函数没有隐藏的 this 指针,不能访问任何非静态成员。
5. 静态成员也是类的成员,受 public 、 protected 、 private 访问限定符的限制。
(三)相关问题思考
1. 静态成员函数可以调用非静态成员函数吗?
答案是否定的。因为静态成员函数没有 this 指针,无法确定要操作哪个具体对象的非静态成员。
2. 非静态成员函数可以调用类的静态成员函数吗?
可以。因为静态成员函数是类共享的,非静态成员函数有 this 指针,可以通过类名或对象来调用静态成员函数。
三、友元
友元提供了一种突破封装的方式,在某些情况下能带来便利,但也会增加耦合度,破坏封装性,所以不宜多用。友元分为友元函数和友元类。
(一)友元函数
当我们尝试重载 operator<< 输出运算符时,会发现无法将其重载成成员函数。因为 cout 的输出流对象和隐含的 this 指针在抢占第一个参数的位置, this 指针默认是第一个参数也就是左操作数了,但实际使用中 cout 需要是第一个形参对象才能正常使用。所以要将 operator<< 重载成全局函数,但这样又导致类外没办法访问类的私有成员,此时就需要友元来解决。 operator>> 同理。
以 Date 类为例:
cppclass Date{public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}// d1 << cout; -> d1.operator<<(&d1, cout); 不符合常规调用// 因为成员函数第一个参数一定是隐藏的this,所以d1必须放在<<的左侧friend std::ostream& operator<<(std::ostream& _cout, const Date& d);friend std::istream& operator>>(std::istream& _cin, Date& d);private:int _year;int _month;int _day;};std::ostream& operator<<(std::ostream& _cout, const Date& d){_cout << d._year << "-" << d._month << "-" << d._day;return _cout;}std::istream& operator>>(std::istream& _cin, Date& d){_cin >> d._year;_cin >> d._month;_cin >> d._day;return _cin;}int main(){Date d;std::cin >> d;std::cout << d << std::endl;return 0;}
友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明。友元函数具有以下特点:
- 友元函数可访问类的私有和保护成员,但不是类的成员函数。
- 友元函数不能用 const 修饰。
- 友元函数可以在类定义的任何地方声明,不受类访问限定符限制。
- 一个函数可以是多个类的友元函数。
- 友元函数的调用与普通函数的调用原理相同。
(二)友元类
友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。例如:
cppclass Time{friend class Date; // 声明日期类为时间类的友元类,则在日期类中就直接访问Time类中的私有成员变量public:Time(int hour = 0, int minute = 0, int second = 0): _hour(hour), _minute(minute), _second(second){}private:int _hour;int _minute;int _second;};class Date{public:Date(int year = 1900, int month = 1, int day = 1): _year(year), _month(month), _day(day){}void SetTimeOfDate(int hour, int minute, int second){// 直接访问时间类私有的成员变量_t._hour = hour;_t._minute = minute;_t._second = second;}private:int _year;int _month;int _day;Time _t;};
友元类有以下特性:
- 友元关系是单向的,不具有交换性。比如上述 Time 类和 Date 类,在 Time 类中声明 Date 类为其友元类,那么可以在 Date 类中直接访问 Time 类的私有成员变量,但想在 Time 类中访问 Date 类中私有的成员变量则不行。
- 友元关系不能传递。如果 B 是 A 的友元, C 是 B 的友元,则不能说明 C 是 A 的友元。
- 友元关系不能继承,在继承位置再给大家详细介绍。
通过对构造函数、 static 成员以及友元的深入剖析,我们对C++类与对象的知识有了更全面和深刻的理解。在实际编程中,合理运用这些特性可以编写出更高效、灵活且安全的代码。
相关文章:
C++类与对象进阶知识深度解析
目录 一、再谈构造函数 (一)构造函数体赋值 (二)初始化列表 (三)成员变量初始化顺序 (四)explicit关键字 二、static成员 (一)概念 (二&am…...
【机器学习案列】基于LightGBM算法的互联网防火墙异常行为检测:数据不平衡的解决方案
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
详解minio部署
MinIO 是一款高性能、开源的分布式对象存储解决方案,专为存储非结构化数据(如图片、视频、备份数据等)而设计。MinIO 在吞吐量和延迟上表现出高性能提供与 Amazon S3 完全兼容的 API,支持水平扩展,支持端到端加密、访问…...
校园AI体育:科技赋能教育,运动点亮未来
校园AI体育:科技赋能教育,运动点亮未来 在数字化浪潮的推动下,人工智能(AI)已经悄然走进校园,成为教育领域的一股创新力量。而在体育教育中,AI技术的引入更是为传统体育教学注入了新的活力。校…...
LeetCode算法题(Go语言实现)_35
题目 给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。 一、代码实现 func goodNodes(root *TreeNode) int {if root nil {return 0}return d…...
ROS2_control 对机器人控制(不完整,有时间再更新)
ROS2_control 对机器人控制 安装与介绍安装介绍 使用gz 中写法.yaml文件中写法type: joint_state_broadcaster/JointStateBroadcaster的来源 命令接口关节控制command_interfacetransmission CMakelist.txt与package.xml文件 gz_ros2_control与自定义插件例子描述自定义插件使用…...
SAP-ABAP:SAP Enterprise Services Repository(ESR)技术全景解析
以下是对SAP PO中Enterprise Services Repository(ESR)的深度技术解析,包含详细架构设计、开发实践及企业级应用方案: SAP Enterprise Services Repository(ESR)技术全景解析 一、ESR核心架构与组件关系 1. 技术堆栈定位 ┌─────────────────────…...
每日一道leetcode
2130. 链表最大孪生和 - 力扣(LeetCode) 题目 在一个大小为 n 且 n 为 偶数 的链表中,对于 0 < i < (n / 2) - 1 的 i ,第 i 个节点(下标从 0 开始)的孪生节点为第 (n-1-i) 个节点 。 比方说&…...
通过Aop实现限制修改删除指定账号的数据
1、需求 对于Teach账号创建的数据,其他用户仅仅只有查询的权限,而不能修改和删除。并且部分接口只允许Teach账号访问 2、实现思路 在删除和修改时往往需要传递数据的id,进而可以通过id查询该数据是否由Teach账号创建。当然我们可以在每个删…...
递归实现指数型枚举
我们以n2 为例 我们每次都有选和不选两种 方案,对于每个数字 核心代码 tatic void dfs(int u) { // u代表当前处理的数字if (u > n) { // 终止条件:处理完所有数字for (int i 1; i < n; i) { // 遍历所有数字if (nums[i]) {…...
无代码国产流程引擎 FlowLong 1.1.6 发布
无代码国产流程引擎 FlowLong 1.1.6 于 2025 年 4 月 7 日发布。 FlowLong 是一款纯血国产自研的工作流引擎,具有以下特点: 核心精简:引擎核心仅 8 张表实现逻辑数据存储,采用 json 数据格式存储模型,结构简洁直观。组…...
软考高项-考前冲刺资料-M 类【项目管理类】【光头张老师出品】
重点考点汇总 一、案例答题时需要注意: 1.条目写要清晰,要标注 1、2、3、4、… 2.关键字突出,关键字一定是专业词汇如 “监控”“控制成本”…等等,代替自己平时工作中的用此。 3.尽量多写几点,错了不扣分,但是避免重复写,避免写了一大段的内容,但是表达的是一个观点。…...
LLM Agents项目推荐:MetaGPT、AutoGen、AgentVerse详解
这一部分我们将深入介绍三大备受关注的LLM Agents项目:MetaGPT、AutoGen和AgentVerse,包括它们的背景、设计思路、主要功能、技术亮点以及典型应用场景。 1. MetaGPT:让AI像软件工程团队一样协作 项目背景 MetaGPT由Huang et al.于2023年提…...
win10家庭版安装Docker
win10家庭版本中成功安装Docker,亲测! 1、下载Docker 下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ Docker的有CE和EE版,CE为免费版,EE由公司支持的付费版,在此选择CE版本…...
mapbox基础,加载ESRI OpenStreetMap开放街景标准风格矢量图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.1 ☘️mapboxgl.Map style属性二、🍀加载ESRI OpenStreetMap开放街景标准风…...
【网络安全 | 漏洞挖掘】通过分析JS文件实现接口未授权访问与账户接管
未经许可,不得转载。 文中所述漏洞均已修复,未经授权不得进行非法渗透测试。 文章目录 正文正文 大约一年前,我给我妈买了一辆 2023 款斯巴鲁 Impreza,前提是她得答应我,之后我可以借来做一次“白帽渗透测试”。过去几年我一直在研究其他车企的安全问题,但一直没有机会仔…...
引领东方语言识别新风潮!Dolphin语音模型开创自动语音识别(ASR)新时代
引领东方语言识别新风潮!Dolphin语音模型开创自动语音识别(ASR)新时代 在全球语音识别技术领域,随着人工智能的飞速发展,许多技术巨头纷纷推出了多语言支持的语音识别系统,如Whisper等。然而,尽…...
运动规划实战案例 | 基于四叉树分解的路径规划(附ROS C++/Python仿真)
目录 1 为什么需要四叉树?2 基于四叉树的路径规划2.1 分层抽象2.2 路图搜索2.3 动态剪枝 3 算法仿真3.1 ROS C算法仿真3.2 Python算法仿真 1 为什么需要四叉树? 路径规划的本质是在给定环境中寻找从起点到终点的最优或可行路径,其核心挑战在…...
java设计模式-享元模式
享元模式 基本介绍 1、享元模式(flyweight Pattern),也叫作蝇量模式:运用在共享技术有效的支持大量细粒度的对象。 2、常用语系统底层开发,解决系统的性能问题。像 数据库连接,里面都是创建好的连接对象,在这些连接对…...
Java 大视界 -- Java 大数据在智慧水利水资源调度与水情预测中的应用创新(180)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
自动驾驶---苹果又要造车了吗?
1 背景 巴菲特一直认为造车的企业是一个做 “苦生意” 的企业,可能苹果高层也意识到了这一点, 于是造车计划在去年被终止。 但2025年2月份,苹果公司署名发了一篇自动驾驶领域的论文《Robust Autonomy Emerges from Self-Play》,详…...
Redis主从复制:告别单身Redis!
目录 一、 为什么需要主从复制?🤔二、 如何搭建主从架构?前提条件✅步骤📁 创建工作目录📜 创建 Docker Compose 配置文件🚀 启动所有 Redis🔍 验证主从状态 💡 重要提示和后续改进 …...
PHP:将关联数组转换为索引数组的完整示例
处理之前的数据 头和行在一起显示 // 执行SQL查询后的原始数据(假设查询返回3条记录) $rawData [[wip_entity_name > JOB001,primary_item > ITEM001,primary_name > 主产品1,primary_desc > 主产品描述1,start_quantity > 100,quanti…...
27.[2019红帽杯]easyRE1(保姆教程)
收到文件,.elf 文件,ExeinfoPE查看一下基础信息。无壳,64bit。 把文件拖入IDA工具,查看一下。 点击关键字,ctrl x 交叉搜索一下位置,跟进,顺便菜单左侧 Edit --> Plugins--> findcrypt …...
【Redis】Redis实现分布式锁
1. 基于Redis 1.1 加锁 setnx lockKey uniqueValue1.2 解锁 基于Lua脚本保证解锁的原子性。Redis在执行Lua脚本时,可以以原子性的方式执行,确保原子性。 if redis.call("get", keys[1]) argv[1] then return redis.call("del", …...
AI大模型底层技术——Scaling Law
0. 定义 Scaling Law 是描述 AI 模型性能随关键因素(如参数量、数据量、计算量)增长而变化的数学规律,通常表现为幂律关系。 历史里程碑: **OpenAI 2020 年论文首次系统提出语言模型的缩放定律**DeepMind、Google 等机构后续发表…...
Spring MVC 国际化机制详解(MessageSource 接口体系)
Spring MVC 国际化机制详解(MessageSource 接口体系) 1. 核心接口与实现类详解 接口/类名描述功能特性适用场景MessageSource核心接口,定义消息解析能力支持参数化消息(如{0}占位符)所有国际化场景的基础接口Resource…...
java学习笔记13——IO流
File 类的使用 常用构造器 路径分隔符 常用方法 File类的获取功能和重命名功能 File 类的判断功能 File类的创建功能和删除功能 File 类的使用 总结: 1.File类的理解 > File类位于java.io包下,本章中涉及到的相关流也都声明在java.io包下 > File…...
防DDoS流量清洗核心机制解析
本文深度剖析DDoS流量清洗技术演进路径,揭示混合云清洗系统的四层过滤架构,结合2023年新型反射攻击案例,提出基于AI行为分析的动态防御策略。通过Gartner最新攻防效能数据与金融行业实战方案,阐明流量清洗系统在误判率、清洗延迟、…...
边缘计算革命:低功耗GPU在自动驾驶实时决策中的应用
边缘计算革命:低功耗GPU在自动驾驶实时决策中的应用 ——分析NVIDIA Jetson与华为昇腾的嵌入式方案差异 一、自动驾驶的实时决策挑战与边缘计算需求 自动驾驶系统需在30ms内完成环境感知、路径规划与车辆控制的全流程闭环。传统云端计算受限于网络延迟…...
ubuntu24.04-MyEclipse的项目导入到 IDEA中
用myeclipse创建的一个web项目, jdk1.7,tomcat7,mysql8.0,导入到idea项目中 1.导入现有项目 1.打开IDEA,选择“Import Project”进入下一步 2.选择所需要导入的项目,点击“OK” 3.点击创建一个新的项目,然后下一步 4.直接点…...
基于SpringBoot的律师事务所案件管理系统【附源码】
基于SpringBoot的律师事务所案件管理系统(源码L文说明文档) 目录 4 系统设计 4.1界面设计原则 4.2功能结构设计 4.3数据库设计 4.3.1属性图 4.3.2 数据库物理设计 5 系统实现 5.1客户信息管理 5.2 律师…...
电力网关:推动电力物联网及电力通信系统革新
在“双碳”目标与新型电力系统建设的背景下,电力行业正加速向数字化、智能化、绿色化转型。作为国内领先的电力物联网解决方案提供商,厦门计讯物联科技有限公司(以下简称“计讯物联”)依托自主研发的电力专用网关、边缘计算平台及…...
Android系统的Wi-Fi系统框架和详细启动流程
目录 一、前言 二、系统架构层次 1、应用层 2、Framework层 3、HAL层 4、驱动层 三、Wi-Fi 目录树结构 四、系统流程 1、应用层请求 2、Wi-Fi管理服务处理 3、硬件交互 4、数据处理与事件通知 5.连接管理 6.状态维护 五、WiFi启动流程及函数调用…...
Scala基础知识8
集合计算高级函数 包括过滤、转换或映射、扁平化、扁平化加映射、分组、简化(归约),折叠 过滤:遍历一个集合并从中获取满足指定条件的元素组成一个新的集合。 转换或映射:将原始集合中的元素映射到某个函数中。 扁平化:取消嵌套格式&…...
SwiftUI 本地推送(Local Notification)教程目录
1. 本地推送简介 1.1 什么是本地推送?1.2 本地推送的应用场景(提醒、定时任务、用户交互等)1.3 本地推送与远程推送的区别 2. 前提条件 2.1 开发环境要求(Xcode 13、iOS 15)2.2 需要的基础知识(SwiftUI …...
大数据技术与Scala
集合高级函数 过滤 通过条件筛选集合元素,返回新集合。 映射 对每个元素应用函数,生成新集集合 扁平化 将嵌套集合展平为单层集合。 扁平化映射 先映射后展平,常用于拆分字符串。 分组 按规则将元素分组为Map结构。 归约 …...
golang通过飞书邮件服务API发送邮件功能详解
一.需求 需要实现通过飞书邮件服务API发送邮件验证码功能:用户输入邮箱, 点击发送邮件,然后发送邮件验证码, 这里验证码有过期时间, 保存到redis缓存中 二.实现 实现的部分代码如下: 控制器部分代码 // 发送邮件控制器 func EmailSendController(userId uint64, m proto.Messa…...
BoostSearch搜索引擎项目 —— 测试用例设计 + web自动化测试代码
web自动化代码: https://gitee.com/chicken-c/boost-search/tree/master/AutoTest...
MySQL学习笔记集--触发器
触发器 MySQL触发器(Trigger)是一种特殊的存储过程,它在指定的数据库表上指定的事件(INSERT、UPDATE、DELETE)之前或之后自动执行。触发器可以用来强制执行复杂的业务逻辑、数据完整性规则、自动更新数据等。 触发器…...
算力驱动未来:从边缘计算到高阶AI的算力革命
算力驱动未来:从边缘计算到高阶AI的算力革命 摘要 本文深入探讨了不同算力水平(20TOPS至160TOPS)在人工智能领域的多样化应用场景。从边缘计算的实时目标检测到自动驾驶的多传感器融合,从自然语言处理的大模型应用到AI for Scie…...
4.8刷题记录(双指针)
今天刷的部分是代码随想录中的双指针专题代码随想录 由于里面包含的题目大部分之前刷过,并且用双指针做过。所以今天仅仅复习,不再进行代码的搬运。 1.19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) 分析:此题无…...
在shell脚本中,$@和$#的区别与联系
在 Shell 脚本里,$ 和 $* 都是用于表示传递给脚本或函数的所有参数,下面详细介绍它们的区别与联系。 联系 表示所有参数:二者都能够代表传递给脚本或者函数的全部参数。当你在执行脚本时带上了多个参数,$ 和 $* 都能把这些参数呈…...
IP节点详解及国内IP节点获取指南
获取国内IP节点通常涉及网络技术或数据资源的使用,IP地址作为网络设备的唯一标识,对于网络连接和通信至关重要。详细介绍几种修改网络IP地址的常用方法,无论是对于家庭用户还是企业用户,希望能找到适合自己的解决方案。以下是方法…...
Google Play上架:解决android studio缓存问题(内容清理不干净导致拒审)
在as打包中,经常会遇到改变工程参数或者对应文件参数的情况,比如 修改android gradle版本 快捷键:ctrl + alt + shift + s 修改SDK文件路径 快捷键:ctrl + alt + shift + s 修改Gradle存储下载文件的默认位置 快捷键:ctrl + alt + s 先打开设置 修改compile...
蓝桥杯备赛 Day 21 图论基础
图的基础 ![[图的基础.png]] 1.图的存储方式 (1)邻接表(常用) vector<pair<int,int>> g[N]; //g[x]存放x的所有出点信息,二维数组 g[i][j]{first,second},first是从i出发的第j个出点,second表示边权 例如上图: g[1]{{2,0}.{3,0}} g[6]{{3,7}} g[4]{{5,0},{6,0}…...
MySQL数据库应用技术试卷
建一个以自己名字拼音为命名的数据库。(3分) CREATE DATABASE example; 令这个数据库为当前所使用的数据库。(2分) USE example; 写出如下student表结构语句。(95分) 表1: 列名 数据类型 …...
openssl源码分析之加密模式(modes)
openssl实现分组加密模式(例如AES128-CBC的CBC部分)的模块名字叫做modes,源代码位于 https://gitee.com/gh_mirrors/openssl/tree/master/crypto/modes 博主又打不开github了TT,只能找个gitee镜像 头文件是modes.h。 该模块目前…...
【Unity】Unity Transform缩放控制教程:实现3D模型缩放交互,支持按钮/鼠标/手势操作
【Unity 】Transform缩放控制教程:实现3D模型缩放交互,支持按钮/鼠标/手势操作 在Unity开发中,Transform组件承担着场景中物体的空间信息控制,包括位置、旋转和缩放。而缩放(Scale)操作,作为三…...
集成nacos2.2.1出现的错误汇总
总结 1.jdk问题 jdk要一致 2.idea使用问题 idea启动nacos要配置,idea启动类要启动两次,并配置两次vm参数 3.项目依赖问题 依赖要正确添加,有的模块就是不能用公共模块的pom配置,需要独立配置,先后启动顺序也要注意…...