【C++】强制类型转换
强制类型转换分为显式和隐式
显式直接用小括号强制转换,float b = (int)a;
隐式直接 float b = 0.5; int a = b;
C++中更推荐用四个强制类型转换的关键字:
1、static_cast,
2、const_cast,
3、reinterpret_cast,
4、dynamic_cast
1)static_cast
用法为 static_cast (expression)。
该运算符把 expression 转换为 type-id 类型,但没有运行时类型检查来保证转换的安全性。
主要用法如下:
(1)用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。
进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;
进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。
(2)用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
(3)把空指针转换成目标类型的空指针。
(4)把任何类型的表达式转换成void类型。
int num1 = 2;int num2 = 3;double num3 = static_cast<double>(num2) / static_cast<double>(num1);//double num3 = (double)(num2)/(double)(num1);
注意,static_cast 不能转换掉 expression 的 const、volitale 或者 __unaligned 属性
2)const_cast
上边的 static_cast 不能将 const int* 转成 int*,const_cast 就可以,用法为 const_cast (expression),const_cast<>里边的内容必须是引用或者指针
3)reinterpret_cast
reinterpret_cast 主要有三种强制转换用途:
1、改变指针或引用的类型
2、将指针或引用转换为一个足够长度的整形
3、将整型转换为指针或引用类型。
用法为 reinterpret_cast (expression)。
type-id 必须是一个指针、引用、算术类型、函数针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。
4)dynamic_cast
用法为 dynamic_cast (expression)。
几个特点如下:
(1)其他三种都是编译时完成的,dynamic_cast 是运行时处理的,运行时要进行类型检查。
(2)不能用于内置的基本数据类型的强制转换
(3)dynamic_cast 要求 <> 内所描述的目标类型必须为指针或引用。dynamic_cast 转换如果成功的话返回的是指向类的指针或引用,转换失败的话则会返回 nullptr
(4)在类的转换时,在类层次间进行上行转换(子类指针指向父类指针)时,dynamic_cast 和 static_cast 的效果是一样的。在进行下行转换(父类指针转化为子类指针)时,dynamic_cast 具有类型检查的功能,比 static_cast 更安全。 向下转换的成功与否还与将要转换的类型有关,即要转换的指针指向的对象的实际类型与转换以后的对象类型一定要相同,否则转换失败。在C++中,编译期的类型转换有可能会在运行时出现错误,特别是涉及到类对象的指针或引用操作时,更容易产生错误。Dynamic_cast操作符则可以在运行期对可能产生问题的类型转换进行测试。
(5)使用 dynamic_cast 进行转换的,基类中一定要有虚函数,否则编译不通过(类中存在虚函数,就说明它有想要让基类指针或引用指向派生类对象的情况,此时转换才有意义)。这是由于运行时类型检查需要运行时类型信息,而这个信息存储在类的虚函数表中,只有定义了虚函数的类才有虚函数表
ref: https://blog.csdn.net/Bob__yuan/article/details/88044361
相关文章:
【C++】强制类型转换
强制类型转换分为显式和隐式 显式直接用小括号强制转换,float b (int)a; 隐式直接 float b 0.5; int a b; C中更推荐用四个强制类型转换的关键字: 1、static_cast, 2、const_cast, 3、reinterpret_cast, 4、dynami…...
java日志框架总结(四 、JCL日志门面技术)
日志框架出现的历史顺序:Log4j → JUL → JCL → slf4j → logback → log4j2 一、背景 在前面博文中,我们分别讲述了常用的2个日志框架:JUL(Java Util Logging)、Log4J。那么如何选择使用哪一个呢? 根据项…...
mfc140.dll丢失的几种修复方式,有效的解决文件丢失问题
mfc140.dll是Microsoft Foundation Class (MFC)库中的一个非常重要的DLL文件。它承载了许多被执行程序使用的函数和资源。这个库主要被广泛应用于开发Windows操作系统上的应用程序。然而,有时候我们可能会遭遇到mfc140.dll缺失或损坏的情况,这会导致依赖…...
从一个小故事讲解观察者模式~
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 什么是观察者模式? 观察者模式在我们的日常生活中极其常见。 先来看看观察者模式的定义: 观察者模式定义了对象之间…...
LeetCode、1137. 第 N 个泰波那契数【简单,动态规划】
文章目录 前言LeetCode、1137. 第 N 个泰波那契数【简单,动态规划】题目与分类思路一维动态规划 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术…...
Python爬虫urllib详解
前言 学习爬虫,最初的操作便是模拟浏览器向服务器发出请求,那么我们需要从哪个地方做起呢?请求需要我们自己来构造吗?需要关心请求这个数据结构的实现吗?需要了解 HTTP、TCP、IP 层的网络传输通信吗?需要知…...
Linux嵌入式开发+驱动开发-中断
swi汇编指令可以产生软中断,以下是硬件中断的产生到执行完毕的全过程: 在自己设计的芯片“CPU响应中断”程序的第四个步骤可以转向“中断向量控制器”,中断向量控制器中存储中断元服务地址即处理中断处理程序的地址,而不用使用0X1…...
android tv开发-1,leanback
目录 1.leanback库的一些事 2.leanback在使用时遇到的一些麻烦 视频卡片 页面空白 关于左侧菜单的一些设置 数据加载异常与加载中的一些操作 如果页面无数据,如何显示错误的页面....
chisel RegInit/UInt/U
val reg RegInit(0.U(8.W)) //ok val reg RegInit(0.UInt(8.W)) //errU 使用在数字 . 后边50.U UInt 使用在IO(new Bundle val a Input(UInt(8.W)) 或者 def counter(max:UInt, a1:UInt) package emptyimport chisel3._ import chisel3.util._class MyCounter extends …...
华为OD机试真题-田忌赛马-2024年OD统一考试(C卷)
题目: 给定两个只包含数字的数组a,b,调整数组 a 里面数字的顺序,使得尽可能多的 a[i] >b[i]。数组 a和 b 中的数字各不相同。 输出所有可以达到最优结果的 a 数组的数量 输入描述: 输入的第一行是数组 a 中的数字,其中只包含数字,每两个数字之间相隔一个空格,a 数组…...
QMUI_Android:提升Android开发效率与质量的利器
QMUI_Android:提升Android开发效率与质量的利器 在Android应用开发过程中,开发者常常面临着重复编写基础组件和处理兼容性问题的挑战,这不仅耗费时间,也降低了开发效率。为了解决这一问题,Tencent推出了QMUI_Android框…...
如何部署Linux AMH服务器管理面板并结合内网穿透远程访问
文章目录 1. Linux 安装AMH 面板2. 本地访问AMH 面板3. Linux安装Cpolar4. 配置AMH面板公网地址5. 远程访问AMH面板6. 固定AMH面板公网地址 AMH 是一款基于 Linux 系统的服务器管理面板,它提供了一系列的功能,包括网站管理、FTP 管理、数据库管理、DNS 管…...
C++文件操作(2)
文件操作(2) 1.二进制模式读取文本文件2.使用二进制读写其他类型内容3.fstream类4.文件的随机存取文件指针的获取文件指针的移动 1.二进制模式读取文本文件 用二进制方式打开文本存储的文件时,也可以读取其中的内容,因为文本文件…...
Bootstrap5 图片轮播
Bootstrap5 轮播样式表使用的是CDN资源 <title>亚丁号</title><!-- 自定义样式表 --><link href"static/front/css/front.css" rel"stylesheet" /><!-- 新 Bootstrap5 核心 CSS 文件 --><link rel"stylesheet"…...
WINDOWS搭建NFS服务器
下载并安装 Networking Software for Windows 启动配置 找到安装目录(如C:\Program Files\nfsd),双击nfsctl.exe,菜单Edit->Preferences 启动后: 配置Export Exports->Edit exports file 其他的几句我都删除…...
LeetCode、216. 组合总和 III【中等,组合型枚举】
文章目录 前言LeetCode、216. 组合总和 III【中等,组合型枚举】题目类型与分类思路 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖…...
支持534种语言,开源大语言模型MaLA-500
无论是开源的LLaMA 2还是闭源的GPT系列模型,功能虽然很强大,但对语言的支持和扩展比较差,例如,二者都是以英语为主的大模型。 为了提升大模型语言的多元化,慕尼黑大学、赫尔辛基大学等研究人员联合开源了,…...
面试 JavaScript 框架八股文十问十答第一期
面试 JavaScript 框架八股文十问十答第一期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)JavaScript有哪些…...
【发票识别】新增针对图片发票的识别(升级中)
说明 为了完善发票识别的功能,目前发票识别支持发票图片格式的识别,增加可用性。 体验 体验地址:https://invoice.behappyto.cn/invoice-service/ 体验地址上面有示例的发票,可以下载上传识别或者复制url地址进行识别。 技术栈…...
面试数据结构与算法总结分类+leetcode目录【基础版】
🧡🧡🧡算法题目总结: 这里为大家总结数据结构与算法的题库目录,如果已经解释过的题目会标注链接更新,方便查看。 数据结构概览 Array & String 大家对这两类肯定比较清楚的,同时这也是面试…...
2026年4月OpenClaw怎么集成?腾讯云6分钟超简单安装步骤
2026年4月OpenClaw怎么集成?腾讯云6分钟超简单安装步骤。OpenClaw(原Clawdbot)作为2026年主流的AI自动化助理平台,可通过阿里云轻量服务器实现724小时稳定运行,并快速接入钉钉,让AI在企业群聊、个人工作流中…...
程序员副业指南:从技术到收入的10种变现路径
CSDN程序员副业图谱技术文章大纲副业方向概览技术博客与内容创作:分享技术经验、教程、行业见解在线教育与课程开发:录制视频课程、开设直播讲座开源项目与工具开发:参与或主导开源项目,开发实用工具自由职业与远程工作࿱…...
OpCore-Simplify:一键自动化黑苹果配置,让复杂技术变得简单
OpCore-Simplify:一键自动化黑苹果配置,让复杂技术变得简单 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify是…...
S2-Pro模型部署在CentOS7生产环境:系统调优与安全加固
S2-Pro模型部署在CentOS7生产环境:系统调优与安全加固 1. 引言 在AI模型生产环境部署中,系统调优和安全加固往往是被忽视却至关重要的环节。很多团队花费大量精力优化模型性能,却因为基础环境配置不当导致服务不稳定或安全漏洞。本文将手把…...
DeOldify开发者效率提升:10分钟集成到现有Flask/Django项目中
DeOldify开发者效率提升:10分钟集成到现有Flask/Django项目中 1. 项目简介 你是不是遇到过这样的场景:客户想要一个黑白照片上色的功能,但你完全不懂深度学习?或者想要给老照片修复应用添加AI能力,却被复杂的模型部署…...
ESP32-S3实战指南:SPI多设备管理与高效数据传输
1. ESP32-S3的SPI总线基础认知 第一次接触ESP32-S3的SPI总线时,我完全被各种专业术语搞懵了。后来在实际项目中反复折腾才发现,SPI本质上就是个"快递小哥",负责在芯片和外围设备之间搬运数据。ESP32-S3内置了4个这样的"快递站…...
OFA-COCO蒸馏版部署教程:Windows WSL2环境下PyTorch服务调试全流程
OFA-COCO蒸馏版部署教程:Windows WSL2环境下PyTorch服务调试全流程 1. 引言:为什么选择OFA图像描述模型? 你有没有遇到过这样的场景?手头有一堆图片,需要为它们配上文字说明,一张张手动写描述,…...
[AI/应用/MCP] MCP Server/Tool 开发指南
1. 智能软件工程的范式转移:从库集成到原生框架演进 在生成式人工智能(Generative AI)从单纯的文本生成向具备自主规划与执行能力的“代理化(Agentic)”系统跨越的过程中,.NET 生态系统正在经历一场自该平台…...
Gitee:数字化转型浪潮中企业项目管理的战略级解决方案
在数字经济成为全球经济增长新引擎的背景下,企业数字化转型已从"选择题"变为"必答题"。项目管理工具作为数字化转型的基础设施,其重要性日益凸显。根据IDC最新预测,到2025年,中国数字经济规模将突破80万亿元&…...
CSS 容器查询:组件级响应式设计
CSS 容器查询:组件级响应式设计代码如诗,容器如画。让我们用容器查询的强大能力,创建真正自适应的组件。什么是容器查询? 容器查询(Container Queries)是 CSS 中一项革命性的特性,它允许我们根据…...
