C++ 类型转换

避坑指南:Win10安装Docker Desktop时Hyper-V报错的7种解决方案(2024最新版) 本文提供了2024年最新、最全面的Windows 10系统下Docker Desktop安装时Hyper-V报错的解决方案指南。文章深入剖析了Hyper-V与Docker的共生关系,并系统性地给出了从BIOS/UEFI设置、Windows功能启用、bcdedit命令修复到处理多虚拟化环境共存等7种核心解决方案,帮助开发者彻底解决安装困局,顺利部署容器化开发环境。 阅读详情

C++ 类型转换

C 风格强制转换

当等号两边的类型不同的时候、形参与实参类型不匹配的时候、返回值类型与接收返回值类型不一致时,就需要发生类型转化。

而类型转换又分为隐式类型转换和显式类型转换。

隐式类型转换

// 隐式类型转换
int Ival = 1;
double Dval = Ival;

隐式类型转换是编译器在编译阶段自动进行,能转就转,不能转就编译失败。

显式类型转换

格式: TYPE a = (TYPE) b

即通过圆括号直接转型,常见有以下几种情况:

  1. 浮点数赋值给整型,舍弃小数部分(符合一般思维,可放心使用)。
  2. 整数赋值给浮点型,数值不变,底层改用指数格式存储(符合一般思维,可放心使用)。
  3. double型小数赋值给float型小数,精度略微损失,可能出现数值范围溢出(小心使用)。
  4. 字符赋值给整数型,保留原字节数据,因为字符本身就是用ASCII码表示的,本质就是八位的较小整数(理解字符的存储方式,就很容易接受)。
  5. 整数赋值给字符型,截断高地址数据,只保留低地址的八位,因为char型最多只有八位(小心使用)。
  6. 有符号整数赋值给无符号整数,将包括符号在内的全部字节的直接赋值,实际数值会改变(小心使用)。
  7. 无符号整数赋值给有符号整数,也是将包括符号在内的全部字节的直接赋值,但是数值可能会改变(小心使用)。

unsigned int和int字节存储区别:unsigned int和int位数是一样的,但是int将首个bit位作为正负号,0表示正数,1表示负数。unsigned int和int之间都是以字节的方式相互赋值。当字节以0开头时,它们表示的数值是相同的,当字节以1开头时,它们则分别表示整数和负数。由于int将首位作为符号位,因此它实际能表示的最大正整数只有unsigned int的一半。

C++ 四种类型转换方式

static_cast

static_cast 是一个C++运算符,功能是把一个表达式转换为某种类型,类似C风格的强制转换,但没有运行时类型检查来保证传唤的安全性。

格式:TYPE a = static_cast <TYPE>(expression)

用法:

  1. 用于类层次结构中基类(父类)和派生类(子类)之间的指针或引用的和转换。
    进行向上转换(将派生类的指针或引用转换成基类表示)是安全的;进行向下转换(将基类指针或者引用转换为派生类表示)时,由于没有动态类型的检查,所以是不安全的。
  2. 用于基本数据类型之间的转换。
    如把int转换为char,把int转换为enum。这种转换的安全性也要开发人员来保证。
  3. 把空指针转换成目标类型的空指针。
  4. 把任何类型的表达式转换为void类型。

注意事项: static_cast 不能转换掉expression的const、volatile或者__unaligned属性。

dynamic_cast

dynamic_cast是将一个基类对象指针(或引用)转换到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理。虽然static_cast也具备这样的功能,但是是不安全的,dynamic_cast则会在转型时判断类型,如果类型不符则返回nullptr。

由于类型信息是保存在虚函数表中的,因此dynamic_cast操作的基类必须包含virtual函数。

dynamic_cast运算符涉及到编译器的属性设置,而且牵扯到的面向对象的多态性跟程序运行时的状态也有关系,所以不能完全的使用传统的替换方式来代替。但是也因此它最常用,是最不可缺少的一个运算符。

格式: TYPE a = dynamic_cast<TYPE>(expression)

说明:

该运算符把expression转换成TYPE类型的对象。TYPE必须是类的指针、类的引用或者void*;如果TYPE是类指针类型,那么expression也必须是一个指针,如果TYPE是一个引用,那么 expression 也必须是一个引用。

dynamic_cast运算符可以再执行期决定真正的类型。如果downcast是安全的(也就是说,如果基类指针或者引用确实指向一个派生类对象)这个运算符会传回适当转型过的指针。如果downcast不安全,这个运算符会传回空指针(即基类指针或者引用没有指向一个派生类对象)。

用法:

  1. dynamic_cast在类层次间进行向上转换时,效果和static_cast一样。
  2. dynamic_cast在类层次间进行向下转换时,具有类型检查功能,更安全。

reinterpret_cast

首先从英文字面的意思理解,interpret是“解释,诠释”的意思,加上前缀“re”,就是“重新诠释”的意思;cast在这里可以翻译成“转型”,这样整个词顺下来就是“重新诠释的转型”。

顾名思义,reinterpret_cast就是不改变指针地址,但是强制将地址处的内存字节解释为某种类型的数据。

reinterpret_cast转换的实质是让编译器重新给出对象的比例模型而不进行二值转换。也就是让编译器按照目标转换类型在内存中所占的比特位重新编译原始数据类型。转换前后对象的地址值是不变的,只是对象的读取内存的比例变了而已。

格式: TYPE a = reinterpret_cast<TYPE>(expression)

TYPE必须是一个指针,引用,算术类型,函数指针,成员指针等。reinterpret_cast可以把一个整型转换为指针,也可以把一个指针转换为整型。总结来说,reinterpret_cast可以允许任何指针类型(引用)之间的转换,整型与指针类型间的转换以及指针与足够大的整型之间的转换。

reinterpret_cast 实测:C+±----reinterpret_cast

const_cast

const_cast是一个基于C语言编程开发的运算方法,用于常量指针和非常量指针间的转换,同样适用于引用、函数和模块接口,其主要作用是:修改类型的const或volatile属性。

volatile详解:volatile-百度百科

即便是在单个文件中,我们也可能希望某个变量在大多时候值不被修改,但是在某个特定地方却又必须修改它的值,这时const_cast就派上用场了。

const_cast提供了一个解决特殊需求的捷径,但是不应当滥用,否则const属性就失去意义了

格式: TYPE a = const_cast <type-id>(expression)

说明:上述格式中,除了const或volatile修饰之外,TYPE和expression的类型是一样的。

Claude Skills 深度讲解 阶段 1:Function Call(2023)├─ 大模型可以调用外部工具├─ 问题:缺乏对任务的深度理解└─ 局限:工具调用简单线性阶段 2:MCP 上下文工程(2024)├─ 大模型有了更丰富的上下文和工具├─ 问题:仍然需要手动编写复杂的 Prompt└─ 局限:每次对话都需要重新加载上下文阶段 3:Claude Skills(2025)├─ 大模型有了「能力模块」的概念├─ 可以动态加载、组合、执行专门的工作流├─ 真正实现了「知识的模块化和复用」 阅读详情

相关推荐

华为S7700交换机Console密码重置全流程详解

本文详细解析了华为S7700交换机Console密码丢失后的重置全流程。通过进入BootROM菜单清除密码,并涵盖单/双主控场景操作、必备工具连接、常见问题排查及重置后的安全配置建议,帮助网络工程师掌握核心交换机的关键应急恢复技能,确保运维安全。

resnet7explorer的博客 542

cast 变成了整数_xxx_cast类型转换

类型转换隐式类型转换显式类型转换语法xxx_cast (表达式)1. static_cast用于非多态类型之间的转换,不提供运行时的检查来确保转换的安全性。主要有如下基本数据类型转换int转换成enum基类和子类之间指针和引用的转换上行转换,把子类的指针或引用转换成父类,这种转换是安全的(通常使用默认转换)。下行转换,把父类的指针或引用转换成子类,这种转换是不安全的,也需要程序员来保证(通常使用...

weixin_30980893的博客 601

学习记录-Simpack生成车轮不圆的几种示例

单阶、多阶和实测车轮多边形的添加教程

weixin_51965897的博客 3707

[cpp进阶]C++类型转换

当我们在函数中用父类的指针或引用接受参数时,接收的参数有可能指向父类对象也有可能指向子类对象,当接收的参数指向父类对象时,不需要做任何处理,当接收的参数指向子类对象时,有时就需要将该对象转换为原来的子类对象。

weixin_53027918的博客 1143

[uboot] (第一章)uboot流程——概述

[uboot] uboot流程系列: [project X] tiny210(s5pv210)上电启动流程(BL0-BL2)建议先看《[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)》,根据例子了解一下上电之后的BL0\BL1\BL2阶段,以及各个阶段的运行位置,功能。==============================================

ooonebook的博客 1万+

平均电流控制模式BUCK变换器的环路设计

引言 电压模式的BUCK变换器存在的常见缺点: 1、在没有前馈补偿的时候,对输入源的跳动响应较慢; 2、在不加入电感电流控制的时候,由于不直接对电感电流进行采样,因此不能实时的控制电感电流,有可能在某些负载极端变化时,系统直接奔溃; 3、LC组成的二阶系统存在谐振点,谐振峰随负载变化而变化,不容易做到完全消除; 峰值电流模式的BUCK变换器存在的常见缺点: 1、占空比大于50%时,存在次谐波震荡的问题,需要添加斜坡补偿已解决该问题; 2、抗干扰能力较差; 3、峰值电流和平均电流间存在误差,不适合做PFC线路

c007106333的博客 1万+

【C++】特殊类的设计、单例模式以及Cpp类型转换

本文深入探讨C++中特殊类的设计方法与类型转换机制。针对特殊类设计,详细解析如何实现禁止拷贝、限制对象创建于堆/栈、防止继承及单例模式(饿汉与懒汉),并分析其应用场景与线程安全问题。在类型转换部分,系统介绍C++四种强制转换操作符(static_cast、reinterpret_cast、const_cast、dynamic_cast)的原理与适用场景,剖析隐式转换的潜在风险(如数据截断与死循环),并对比C风格转换的缺陷。通过实例代码与场景分析,帮助开发者掌握高效、安全的编程实践,提升代码健壮性与可维护性。

2303_77756141的博客 2237

Open3D 点云数学形态学滤波(Python版本)

Open3D 点云数学形态学滤波(Python版本)

dayuhaitang1的博客 1397

Cpp||类型转换

Cpp类型转换 文章目录Cpp类型转换1:c语言中的类型转换1.1:隐式类型转换:意义相似的类型1.2: 强制类型转换:意义差距较大的类型2:C++中的类型转换2.1:static_cast2.2:reinterpret_cast2.3:const_cast2.4:dynamic_cast 1:c语言中的类型转换 1.1:隐式类型转换:意义相似的类型 int main(){ int a=2; ...

Template Code 851

基于Java+SpringBoot+微信小程序实现奶茶点单系统

再不用担心逢年过节的第一杯奶茶有没有人送了,制作一个奶茶点单系统自己当店主,开怀畅饮,一劳永逸。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

整理 钢琴 约翰汤普森-简易钢琴(小汤)

文件名:(小汤1)约翰-汤普森钢琴1 超清PDF (原版引进)文件名:(小汤2)约翰-汤普森钢琴2 超清PDF (原版引进)文件名:(小汤3)约翰-汤普森钢琴3 超清PDF (原版引进)文件名:(小汤4)约翰-汤普森钢琴4 超清PDF (原版引进)文件名:(小汤5)约翰-汤普森钢琴5 超清PDF (原版引进)文件大小:20.1 MB。文件大小:23.7 MB。文件大小:45.7 MB。文件大小:51.7 MB。文件大小:72.0 MB。

TS的博客 5万+

cpp 类型转换

cpp 丰富的类型允许根据不同的需求选择不同的类型,这也使计算机的操作更复杂。例如,将两个short值相加涉及到的硬件编译指令可能会与将两个long值相加不同。由于有11中整型和3种浮点类型,因此计算机需要处理大量不同的情况,尤其是对不同的类型进行运算时,为处理这种潜在的混乱,cpp自动执行很多类型转换: 将一种算术类型的值赋给另一种算术类型的变量时,cpp将对值进行转换; 表达式中包含不同的类型时,cpp将对值进行转换; 将参数传递给函数时,cpp将对值进行转换; 1.初始化和赋值...

liguandong 2382

2025年最新自动化/控制保研夏令营&预推免面试真题分享(东南大学苏州校区/华东理工/南航/天大)

笔者来2021级本科自动化专业,以下部分将介绍我在夏令营以及预推免期间发生经历和问题。

Control Everything 2584

C++的类型转换

C语言和C++都是强类型语言,如果赋值运算符左右两侧变量的类型不同,或形参与实参的类型不匹配,或返回值类型与接收返回值的变量类型不一致,那么就需要进行类型转换。C语言中有两种形式的类型转换,分别是隐式类型转换和显式类型转换:隐式类型转换:编译器在编译阶段自动进行,能转就转,不能转就编译失败。显式类型转换:需要用户自己处理,以`(指定类型)变量`的方式进行类型转换。需要注意的是,只有相近类型之间才能发生隐式类型转换,不相近类型之间只能进行强制类型转换。

2021dragon的博客 7573

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【C++】—— C++的类型转换

C++的类型转换详解

m0_56069910的博客 3674

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++强制类型转换

C++ 类型转换(C风格的强制转换): 在C++基本的数据类型中,可以分为四类:整型,浮点型,字符型,布尔型。其中数值型包括 整型与浮点型;字符型即为char。 (1)将浮点型数据赋值给整型变量时,舍弃其小数部分。 (2)将整型数据赋值给浮点型变量时,数值不变,但是以指数形式存储。 (3)将double型数据赋值给float型变量时,注意数值范围溢出。 (4)字符型数据可以赋值给整型变量,此时存入的是字符的ASCII码。 (5)将一个int,short或long型数据赋值给一个char型变量,只

q610098308的专栏 6万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【C++】类型转换

如果,或者,或者,就需要有以下两种形式:1.隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败2.显式类型转化:需要用户自己处理:转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换。

关注学习C++领域,感谢陪伴,共同进步! 1437

cpp 4个类型转换

static_cast、dynamic_cast、reinterpret_cast、const_cast 之间的区别 static_cast 用法:static_cast (expression) 说明:该运算符把expression转换为typeid类型,但没有运行时类型检查来确保转换的安全性。 用途: 用于类层次结构中基类和派生类之间指针或者引用的转换。up-casting (把派生类的指...

weixin_33984032的博客 1045

【C++】四种强制类型转换

C++ 四种强制类型转换   C语言中的强制类型转换(Type Cast)有显式和隐式两种,显式一般就是直接用小括号强制转换,TYPE b = (TYPE)a; 隐式就是直接 float b = 0.5; int a = b; 这样隐式截断(by the way 这样隐式的截断是向 0 取整的,我喜欢这么叫因为 0.9 会变成 0,1.9 变成 1,-0.9 变成 0,-1.9 变成 -1)。  ...

Bob__yuan的博客 4万+

Cpp_类型转换

C风格的类型转换C++完全兼容。C++新增了四个显式类型转换运算符。 1)静态类型转换:static_cast<目标类型> A.将基类的指针或引用转换为子类的指针或引用; B.自定义类型转换。它允许子类类型的指针转换为父类类型的指针(这是一个有效的隐式转换),同时,也能够执行相反动作:转换父类为它的子类,但会给出编译警告下面的例子中,被转换的父类没有被检查是否与目的类型相一致。class Ba

Jerry的专栏 1022

【C++】C++的类型转换

本篇文章概要性地介绍了C语言与C++中的类型转换机制。首先,回顾了C语言中的类型转换方式。然后,阐述了C++为何需要四种强制类型转换(static_cast、reinterpret_cast、const_cast、dynamic_cast),以适应其面向对象的特性及复杂的类层次结构。接着,详细说明了这四种强制类型转换的使用场景与特点。此外,简要介绍了RTTI(运行时类型识别)的概念。希望本篇文章对大家学习C++类型转换有所帮助。

是阿建吖! 900

C++四种强制类型转换

文章目录1 C++类型转换本质1.1 自动类型转换(隐式)1.2 强制类型转换(显式)1.3 类型转换的本质1.4 类型转换的安全性2 四种类型转换运算符2.1 C语言的强制类型转换与C++的区别3 static_cast4 reinterpret_cast5 const_cast6 dynamic_cast6.1 向上转型(Upcasting)6.2 向下转型(Downcasting) 1 C++类型转换本质 1.1 自动类型转换(隐式) 利用编译器内置的转换规则,或者用户自定义的转换构造函数以及类型转换

u_hcy2000的博客 1万+

[C++][C++类型转换]详解

[C++][C++类型转换]详解

SnowK博客 4707

【C++】 类型转换深度探索:揭开类型转换的奥秘

详细讲解了c++四种类型转换的原理和实践

You build it, you run it 2411
上一篇: 一个程序从编译到运行的全过程
下一篇: 华为机试真题练习汇总(101~110)
UestcXiye
博客等级 码龄8年 9031粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值