【c++】四种类型转换形式
【c++】四种类型转换形式
编译时:
static_cast(静态转换)
const_cast(去常性转换)
reinterpret_cast(重新解释转换,直接转换地址)
运行时:
dynamic_cast(动态转换,运行时类型识别 RTTI)
static_cast(静态转换)
用途 | 描述 | 注意事项 |
---|---|---|
基本数据类型之间的转换 | 用于 int 转 double 、char 转 int 等类型之间的转换。 | 适用于已知类型的转换,比 C 风格转换更安全。 |
void* 转换为其他类型 | 用于将 void* 指针还原为具体类型的指针。 | 必须确保指针类型正确,避免未定义行为。 |
左值转换为右值 | 用于将左值转换为右值引用,常用于移动语义。 | 强制转换为右值引用,触发移动构造。 |
类型层次结构中的指针和引用转换 | 在类继承关系中,用于基类和派生类之间的转换。 | 只能进行安全的向上转换,向下转换需要 dynamic_cast 。 |
int 类型转换为枚举 | 允许 int 与枚举类型之间的转换。 | 适用于整数到枚举的安全转换。 |
static_cast 在模板中的应用 | 用于确保目标类型和原始类型一致,并在模板编程中进行类型转换。 | 使用 static_assert 进行编译期类型检查。 |
1. 基本数据类型转换
static_cast
可用于基本数据类型之间的转换,如 int
转 double
、char
转 int
,等价于 C 风格转换,但更安全。
#include <iostream>int main() {double d = 3.14159;int i = static_cast<int>(d); // 截断小数部分,转换为 3char c = 'A';int ascii = static_cast<int>(c); // 将字符 'A' 转换为 ASCII 码std::cout << "i = " << i << ", ascii = " << ascii << std::endl;return 0;
}
✅ 优点:比 C 风格转换更安全,可读性更好,避免了 reinterpret_cast
的风险。
2. void*
转换为其他类型
static_cast
可以用于将 void*
还原为具体类型,但必须确保指针类型正确,否则可能导致未定义行为。
#include <iostream>int main() {int a = 42;void* pVoid = &a; // int* → void*int* pInt = static_cast<int*>(pVoid); // void* → int*std::cout << "pInt = " << *pInt << std::endl;return 0;
}
✅ 适用于已知原始类型的情况,如果不确定类型,应使用 reinterpret_cast
。
3. 左值转换为右值
在 C++11 及更高版本中,static_cast
可以将左值转换为右值引用,用于移动语义。
#include <iostream>
#include <utility> // std::moveclass Data {
public:Data() { std::cout << "构造函数\n"; }Data(const Data&) { std::cout << "拷贝构造\n"; }Data(Data&&) { std::cout << "移动构造\n"; }
};int main() {Data d;Data d2 = static_cast<Data&&>(d); // 强制转换为右值引用,触发移动构造return 0;
}
✅ 与 std::move
类似,但 static_cast<Data&&>
是显式的转换方式。
4. 类型层次结构中的指针和引用转换
在类的继承关系中,static_cast
可以在基类和派生类之间进行转换,但仅限安全的向上转换。
#include <iostream>class Base {
public:virtual void show() { std::cout << "Base 类\n"; }
};class Derived : public Base {
public:void show() override { std::cout << "Derived 类\n"; }
};int main() {Derived d;Base* pBase = static_cast<Base*>(&d); // 向上转换pBase->show(); // 仍然调用 Derived 的 `show()`return 0;
}
⚠️ 向下转换(Base*
→ Derived*
)是不安全的,需要用 dynamic_cast
。
5. int
类型转换为枚举
static_cast
允许整数和枚举类型之间的转换。
#include <iostream>enum Color { RED, GREEN, BLUE };int main() {int num = 1;Color c = static_cast<Color>(num); // 将 int 转换为枚举类型std::cout << "c = " << c << std::endl;return 0;
}
✅ 适用于整数到枚举的安全转换。
6. static_cast
在模板中的应用
在模板编程中,可以使用 static_cast
确保目标类型和原始类型一致。
#include <iostream>
#include <type_traits>template <typename T, typename U>
T convert(U value) {static_assert(std::is_convertible<U, T>::value, "类型不兼容!");return static_cast<T>(value);
}int main() {double d = 3.14;int i = convert<int>(d); // double → intstd::cout << "i = " << i << std::endl;return 0;
}
✅ static_assert
可用于编译期检查类型是否可以转换。
const_cast(去常性转换)
特点 | 描述 |
---|---|
只能对同类型使用 | const_cast 类型必须相同。 |
不能用于基本数据类型 | 不能用于基本数据类型之间的转换(例如:int → double )。 |
转换目标为指针或引用 | 只能将指针或引用的常量属性去除,而不能作用于值类型。 |
常量指针/引用被转换为非常量的指针/引用,并仍然指向原来的对象
例子:
-
常量指针转为非常量指针
#include <iostream>void modifyValue(const int* ptr) {// const_cast 去常性转换int* modifiablePtr = const_cast<int*>(ptr);*modifiablePtr = 20; // 可以修改原对象 }int main() {const int a = 10;modifyValue(&a); // 将常量指针转换为非常量指针return 0; }
-
常量引用转为非常量引用
#include <iostream>void modifyValue(const int& ref) {// const_cast 去常性转换int& modifiableRef = const_cast<int&>(ref);modifiableRef = 20; // 可以修改原对象 }int main() {const int a = 10;modifyValue(a); // 将常量引用转换为非常量引用return 0; }
注意事项:
const_cast
只会移除常量属性,并不会改变对象本身。- 对于常量对象的修改仍然是未定义行为,因此不应使用
const_cast
去修改那些原本是常量的数据。
reinterpret_cast(重新解释转换)
是 C++ 中最危险的类型转换之一,它将数据从一种类型“强制”转换为另一种类型,并且不进行任何类型检查。
它是按位解释的
特点 | 描述 |
---|---|
最危险的转换 | reinterpret_cast 不进行任何类型检查,可能导致未定义行为。 |
按位解释 | 转换直接基于内存的二进制表示,不考虑类型的语义。 |
指针之间的转换 | 可用于不同类型的指针之间的转换。 |
指针与整数之间的转换 | 可将指针转换为整数,反之亦然。 |
1. 指针类型转换
#include <iostream>int main() {int a = 42;// 强制将 int* 转换为 double*,危险操作,按位解释double* p = reinterpret_cast<double*>(&a);std::cout << *p << std::endl; // 不确定行为,可能崩溃return 0;
}
2. 指针与整数转换
#include <iostream>int main() {int* p = reinterpret_cast<int*>(0x1234); // 将整数转换为指针std::cout << "Pointer: " << p << std::endl;uintptr_t addr = reinterpret_cast<uintptr_t>(p); // 将指针转换为整数std::cout << "Address as integer: " << addr << std::endl;return 0;
}
动态转换(dynamic_cast
)
是一种用于在类层次结构中进行指针或引用类型转换的操作,特别适用于下行转换(基类指针或引用转换为派生类指针或引用)。dynamic_cast
在运行时检查类型安全,依赖于虚函数表和运行时类型信息(RTTI),通过虚函数表中的信息来实现类型检查。
动态转换的基本概念:
-
上行转换(向上转换):
- 向上转换是指派生类对象转换为基类指针或引用是在编译时进行的,与静态类型转换等价,不查虚表
-
下行转换(向下转换):
- 向下转换是指基类指针或引用转换为派生类指针或引用。这种转换在运行时需要类型检查,
- 并且只有在公有继承和继承关系中存在虚函数时才有效,否则没有运行时类型信息(RTTI)进行类型检查。
- 使用
dynamic_cast
来进行下行转换时,转换成功时返回派生类指针或引用,转换失败时返回nullptr
(对于指针类型),或者抛出std::bad_cast
异常(对于引用类型)。 - 例如:
class Base { public:virtual ~Base() {} // 必须有虚析构函数,以支持RTTI };class Derived : public Base {};int main() {Base* pBase = new Derived();Derived* pDerived = dynamic_cast<Derived*>(pBase); // 成功,转换为派生类指针if (pDerived) {std::cout << "转换成功!" << std::endl;} else {std::cout << "转换失败!" << std::endl;}delete pBase;return 0; }
- 如果
pBase
实际上指向一个Derived
类型对象,则pDerived
会成功转换,并指向该对象。 - 如果
pBase
并不指向Derived
类型对象,dynamic_cast
将返回nullptr
,指示转换失败。
- 如果
如何判断是否能够进行下行转换:
- 条件:只有当类之间存在虚函数(如虚析构函数)时,RTTI 才会被启用,
dynamic_cast
才能进行类型检查。 - 执行流程:
dynamic_cast
会查询对象的虚函数表(vtable)。- 如果查询到类型匹配,则转换成功。
- 如果查询失败,则返回
nullptr
(对于指针类型),或抛出异常std::bad_cast
(对于引用类型)。
相关文章:
【c++】四种类型转换形式
【c】四种类型转换形式 编译时: static_cast(静态转换) const_cast(去常性转换) reinterpret_cast(重新解释转换,直接转换地址) 运行时: dynamic_cast(动态转换,运行时类…...
在npm上传属于自己的包
最近在整理代码,上传到npm方便使用,所以学习了如何在npm发布一个包,整理写成一篇文章和大家一起交流。 1、注册npm账号 npm | Home 2、确保是登录状态 (在包目录下,终端执行 npm login) 按enter键自动打开页面&…...
关系型数据库主备高可用方案对比笔记
目录标题 数据库高可用性解决方案对比Oracle Data GuardMySQL 主从复制SQL Server AlwaysOnPG Patroni 流复制达梦 DMDataWatch人大金仓 repmgr 备库故障是否影响主库?表格关系型数据库主备高可用方案对比笔记 数据库高可用性解决方案对比 Oracle Data Guard Orac…...
怎么查看电脑显存大小(查看电脑配置)
这里提供一个简单的方法查看 winr打开cmd 终端输入dxdiag进入DirectX 点击显示查看设备的显示内存(VRAM) 用这个方法查看电脑配置和显存是比较方便的 dxdiag功能 Dxdiag是Windows的DirectX诊断工具,其主要作用包括但不限于以下几点&#…...
深入理解指针(二)
深入理解指针(二) 前言:一、const修饰指针1.const修饰变量2.const修饰的指针变量 二、野指针1.野指针的成因(1).指针的未初始化(2).指针的越界访问(3).指针的空间释放 2.如何规避野指针(1).指针初始化(2).小心访问越界(3)指针不再使用的时候&…...
非华为电脑制作一碰传NFC贴纸
前提: 在笔记本上安装好华为电脑管家,可以在 github 上下载,并测试可以正常和手机或平板连接步骤: 1、打开电脑华为电脑管家,点【快捷服务】,记录下序列号,一般安装后会生成16位的序列号 2、…...
Wpf美化按钮,输入框,下拉框,dataGrid
Wpf美化按钮,输入框,下拉框,dataGrid 引用代码后 引用资源 <ControlTemplate x:Key"CustomProgressBarTemplate" TargetType"ProgressBar"><Grid><Border x:Name"PART_Track" CornerRadius&q…...
Office/WPS接入DeepSeek等多个AI工具,开启办公新模式!
在现代职场中,Office办公套件已成为工作和学习的必备工具,其功能强大但复杂,熟练掌握需要系统的学习。为了简化操作,使每个人都能轻松使用各种功能,市场上涌现出各类办公插件。这些插件不仅提升了用户体验,…...
【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)
目录 一、引言 二、MMoE(Multi-gate Mixture-of-Experts,多门混合专家网络) 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、…...
git submodule使用
git submodule 用于关联其他独立的仓库。 它有着几点好处: 代码复用:可以将工具代码放到单独的仓库,再通过 submodule 关联。模块化开发:可以将项目拆分成多个模块,每个模块设置单独仓库独立开发,再通过 su…...
朝天椒USB服务器:解决加密狗远程连接
本文探讨朝天椒USB服务器用Usb Over Network技术,解决加密狗在虚拟机、云主机甚至异地的远程连接问题。 在企业数字化转型的浪潮中,加密狗作为防止软件盗版的重要手段,广泛应用于各类软件授权场景。然而,随着企业超融合进程不断加…...
[笔记.AI]deepseek-r1的不同版本(满血版、蒸馏版、量化)
满血版:是原始的高性能模型; 蒸馏版(Distill):是指将大型模型(教师模型)的知识转移到较小的模型(学生模型)中,以保持性能的同时减少计算资源的需求࿱…...
Kokoro 开源文本转语音引擎上线!多语言支持,无需联网,浏览器内极速运行
Kokoro 是一款轻量级的开源文本转语音(TTS)引擎,凭借其高效能和轻量化设计,迅速在技术社区中引起关注。本文将详细介绍 Kokoro 的主要特点,并提供在浏览器和 Python 环境中的代码示例,帮助您快速上手。 1. Kokoro:可在浏览器中运行的 TTS 引擎 1.1 简介 Kokoro 是一个…...
Unity 基础编程
在这个练习中将新建unity脚本,控制player的运动与转动,实现用代码检测碰撞与删除物体。 该练习将应用附件中的项目文件,该文件与Unity快速练习的文件是同一个项目文件。 一、构建Player运动脚本 该部分将构建一个在场景中由玩家控制游戏物…...
CTFHub-RCE系列wp
目录标题 引言什么是RCE漏洞 eval执行文件包含文件包含php://input读取源代码远程包含 命令注入无过滤过滤cat过滤空格过滤目录分隔符过滤运算符综合过滤练习 引言 题目共有如下类型 什么是RCE漏洞 RCE漏洞,全称是Remote Code Execution漏洞,翻译成中文…...
基于YoloV11和驱动级鼠标模拟实现Ai自瞄
本文将围绕基于 YoloV11 和驱动级鼠标实现 FPS 游戏 AI 自瞄展开阐述。 需要着重强调的是,本文内容仅用于学术研究和技术学习目的。严禁任何个人或组织将文中所提及的技术、方法及思路应用于违法行为,包括但不限于在各类游戏中实施作弊等违规操作。若因违…...
基于微信小程序的博物馆预约系统的设计与实现
hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…...
R语言LCMM多维度潜在类别模型流行病学研究:LCA、MM方法分析纵向数据
全文代码数据:https://tecdat.cn/?p39710 在数据分析领域,当我们面对一组数据时,通常会有已知的分组情况,比如不同的治疗组、性别组或种族组等(点击文末“阅读原文”获取完整代码数据)。 然而,…...
python卷积神经网络人脸识别示例实现详解
目录 一、准备 1)使用pytorch 2)安装pytorch 3)准备训练和测试资源 二、卷积神经网络的基本结构 三、代码实现 1)导入库 2)数据预处理 3)加载数据 4)构建一个卷积神经网络 5࿰…...
如何把邮件批量导出到本地
最近遇到邮箱满了的问题,需要把邮件批量导出到本地,然后清空邮箱。 问题是这个邮箱的官网,没有批量导出按钮,比较麻烦;总不能一封一封下载到本地,上万的。 找到了一个好用的工具,Mozilla Thun…...
C++智能指针的使用
文章目录 智能指针的使用和原理智能指针的使用场景RAII和智能指针C标准库智能指针的使用 智能指针的使用和原理 智能指针的使用场景 1. 下面的程序中,new了以后,我们也delete了,但是因为抛异常导致后面的delete没有得到执行,所以…...
Docker安装Redis
一、保证Docker提起来了 systemctl status docker想这没有启动要先启动一下 systemctl status docke二、拉取Redis(默认拉最新版) sudo docker pull redis检查一下拉成功没有 docker images三、创建相关目录 mkdir -p /home/redis/{conf,data}四、…...
深入理解MySQL索引底层数据结构
文章目录 前言一、MySQL索引是什么?二、索引的核心需求三、MySQL为什么选择BTree做为数据结构1.如果使用的是Hash 做为数据结构2.如果使用二叉树做为数据结构3.使用红黑树做为数据结构4.使用B-Tree做为数据结构5.BTree做为数据结构 4.BTree深度剖析结构特性与 B-Tre…...
udp和tcp的区别
目录 UDP 和 TCP 的区别 1. 连接性 2. 可靠性 3. 数据传输顺序 4. 流量控制和拥塞控制 5. 效率 6. 应用场景 UDP 和 TCP 的 C/C 代码实现区别 1. TCP 服务器端和客户端 TCP 服务器端(Server) TCP 客户端(Client) 2. U…...
VMware 虚拟机 ubuntu 20.04 扩容工作硬盘
一、关闭虚拟机 关闭虚拟机参考下图,在vmware 调整磁盘容量 二、借助工具fdisk testubuntu ~ $ df -h Filesystem Size Used Avail Use% Mounted on udev 1.9G 0 1.9G 0% /dev tmpfs 388M 3.1M 385M 1% /run /dev/sda5 …...
MapReduce是什么?
MapReduce 是一种编程模型,最初由 Google 提出,旨在处理大规模数据集。它是分布式计算的一个重要概念,通常用于处理海量数据并进行并行计算。MapReduce的基本思想是将计算任务分解为两个阶段:Map 阶段和 Reduce 阶段。 Map 阶段&a…...
跨越边界,大模型如何助推科技与社会的完美结合?
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 概述 2024年,大模型技术已成为人工智能领域的焦点。这不仅仅是一项技术进步,更是一次可能深刻影响社会发展方方面面的变革。大模型的交叉能否推动技术与社会的真正融合?2025年…...
计算机毕业设计SpringBoot校园二手交易小程序 校园二手交易平台(websocket消息推送+云存储+双端+数据统计)(源码+文档+运行视频+讲解视频)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
RK3568平台开发系列讲解(ConfigFS篇)ConfigFS核心数据结构
🚀返回专栏总目录 文章目录 一、数据结构二、结构体关系三、案例3.1、configfs_subsystem 实例3.2、config_group 实例化四、属性和方法五、config_item实例化沉淀、分享、成长,让自己和他人都能有所收获!😄 理解 ConfigFS 的核心数据结构对于深入使用和定制 ConfigFS 非…...
【04】RUST特性
文章目录 隐藏shadowing所有权ownership堆区&栈区所有权规则变量&数据Copy Trait与Drop TraitCopy TraitDrop Trait移动克隆函数参数与返回值的所有权参数引用可变引用悬垂引用slice生命周期隐藏shadowing 有点像同名覆盖 let mut guess = String::new();let guess: u3…...
c语言函数学习
C语言函数学习笔记:从入门到实践 一、什么是函数? 函数是C语言中用于封装特定功能的代码块,是模块化编程的核心。通过函数可以实现: 代码复用:避免重复编写相同逻辑 逻辑清晰:将复杂程序分解为多个小模块…...
LSTM的介绍
网上一些描述LSTM文章看的云里雾里,只是介绍LSTM 的结构,并没有说明原理。我这里用通俗易懂的话来描述一下。 我们先来复习一些RNN的核心公式: h t t a n h ( W h h t − 1 W x x t b h ) h_t tanh(W_h h_{t-1} W_x x_t b_h) httan…...
XML DOM
XML DOM XML DOM(Document Object Model)是一种用于访问和操作XML文档的标准方式。它提供了一种树形结构来表示XML文档,使得开发者能够方便地对XML数据进行读取、修改和操作。本文将详细介绍XML DOM的基本概念、结构、操作方法以及应用场景。 一、XML DOM的基本概念 XML …...
认识网络安全
一 网络攻击链 踩点-工具准备-载荷投递-漏洞利用-释放载荷-建立通道-目标达成 简化下: 目标侦察:准确识别目标,收集目标详细信息,比如 网络、 邮箱、员工、社会关系、对外提供服务、漏洞 信息等,为 后续攻击做准备。…...
华为支付-免密支付接入签约代扣场景开发步骤
一、预签约(服务器开发) 1.开发者按照商户模型调用预直连商户预签约或服务商预签约接口获取preSignNo构建签约信息参数contractStr。 为保证支付订单的安全性和可靠性需要对请求body和请求头PayMercAuth对象内的入参排序拼接进行签名。请参考排序拼接和…...
9.JVM-方法区
前言 这次所讲述的是运行时数据区的最后一个部分 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理 栈、堆、方法区的交互关系 下面就涉及了对象的访问定位 Person&a…...
【Linux Oracle】杂货铺 日常实用2024
1.跨服务器移动文件 passwd=^T^bxxxx `/usr/bin/expect <<-EOF set timeout -1 spawn scp -r ${BATCH_TIME} sxnhtc@192.168.3.x:${EXP_MCRO_DIR}/ expect "*password:" send "$passwd\r" interact expect eof EOF` curl -k -X GET https://192.16…...
深入理解指针初阶:从概念到实践
一、引言 在 C 语言的学习旅程中,指针无疑是一座必须翻越的高峰。它强大而灵活,掌握指针,能让我们更高效地操作内存,编写出更优化的代码。但指针也常常让初学者望而生畏,觉得它复杂难懂。别担心,本文将用通…...
Git 与 Git常用命令
Git 是一个开源的分布式版本控制系统,广泛用于源代码管理。与传统的集中式版本控制系统不同,Git 允许每个开发者在本地拥有完整的代码库副本,支持离线工作和高效的分支管理。每次提交时,Git 会对当前项目的所有文件创建一个快照&a…...
jupyterLab插件开发
jupyter lab安装、配置: jupyter lab安装、配置教程_容器里装jupyterlab-CSDN博客 『Linux笔记』服务器搭建神器JupyterLab_linux_布衣小张-腾讯云开发者社区 Jupyter Lab | 安装、配置、插件推荐、多用户使用教程-腾讯云开发者社区-腾讯云 jupyterLab插件开发教…...
IDEA+DeepSeek让Java开发起飞
1.获取DeepSeek秘钥 登录DeepSeek官网 : https://www.deepseek.com/ 进入API开放平台,第一次需要注册一个账号 进去之后需要创建一个API KEY,然后把APIkey记录保存下来 接着我们获取DeepSeek的API对话接口地址,点击左边的:接口…...
机器学习数学基础:19.线性相关与线性无关
一、线性相关与线性无关的定义 (一)线性相关 想象我们有一组向量,就好比是一群有着不同“力量”和“方向”的小伙伴。给定的向量组 α ⃗ 1 , α ⃗ 2 , ⋯ , α ⃗ m \vec{\alpha}_1, \vec{\alpha}_2, \cdots, \vec{\alpha}_m α 1,α 2…...
快速集成DeepSeek到项目
DeepSeek API-KEY 获取 登录DeekSeek 官网,进入API 开放平台 2. 创建API-KEY 复制API-KEY进行保存,后期API调用使用 项目中集成DeepSeek 这里只展示部分核心代码,具体请查看源码orange-ai-deepseek-biz-starter Slf4j AllArgsConstructo…...
Rocketmq 和 Rabbitmq ,在多消费者的情况下,可以实现顺序消费吗
在多消费者的情况下,RocketMQ 和 RabbitMQ 都可以实现顺序消费,但它们的实现机制和适用场景有所不同。以下是对两者的详细分析和对比: 1. RocketMQ 的顺序消费 1.1 实现机制 顺序消息:RocketMQ 支持顺序消息(Orderly …...
linux下安装【流媒体】SRS之安装与使用
一、 安装srs 这个是一个流媒体服务器。 1.1 github 获取源码 git clone https://github.com/ossrs/srs.git 或者下载国内的 git clone https://gitee.com/ossrs/srs 进去之后下载zip的 #直接使用当前最新的6.0release版本 ,我下载的是zip的 下载了之后上传到…...
Qt QSettings用法
一、概述 QSettings类是Qt框架中的一个重要类,它主要用于存储和访问应用程序的设置和配置。 二、QSettings的构造方式 1、基于组织名和程序名的构造方式(主要用于Windows注册表) 1、explicit QSettings(const QString &organization,c…...
python学opencv|读取图像(六十)先后使用cv2.erode()函数和cv2.dilate()函数实现图像处理
【1】引言 前序学习进程中,先后了解了使用cv2.erode()函数和cv2.dilate()函数实现图像腐蚀和膨胀处理的效果,相关文章链接为: python学opencv|读取图像(五十八)使用cv2.erode()函数实现图像腐蚀处理-CSDN博客 pytho…...
【大数据安全分析】大数据安全分析技术框架与关键技术
在数字化时代,网络安全面临着前所未有的挑战。传统的网络安全防护模式呈现出烟囱式的特点,各个安全防护措施和数据相互孤立,形成了防护孤岛和数据孤岛,难以有效应对日益复杂多变的安全威胁。而大数据分析技术的出现,为…...
[笔记.AI]Deepseek-R1 各参数版本的蒸馏模型对比
备注:信息主要通过Deepseek-R1获得(查询近一个月的在线资料并整理),然后我进行了相应整合。如有错误,希望指出,谢谢。 Deepseek-R1 蒸馏模型 对比维度1.5B7B8B14B32B70B 特有的突破性能力▸ 毫秒级响应(0.3…...
JAVA面向对象2(三大特征)
面向对象的三大特征:封装、继承、多态 封装: 封装,英文单词Encapsulation。 从广义的角度来说,将一块经常要使用的代码片段,定义到方法中,是封装。将多个方法和多个状态数据定义到类体中,也是一…...