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

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


目录

  • C++四种类型转换
    • static_cast静态转换
    • dynamic_cast动态转换
    • const_cast去常转换
    • reinterpret_cast重解释类型转换

C++四种类型转换

  • static_cast<类型>(待转换量)
  • dynamic_cast<类型>(待转换量 )
  • const_cast<类型>(待转换量 )
  • reinterpret_cast<类型>( 待转换量 )

为什么要提出新的类型转换?
C语言中的强制类型转换无所不能,而C++强调类型安全。


static_cast静态转换

编译时确定的,用于相关内容的转换 。

  • int short char 之间
  • 浮点数与整数
  • 普通指针和泛型指针

例如:

    int a = 10;int b = 3;cout << static_cast<float>(a) / static_cast<float>(b) << endl;int *ptr = &a;void *ptr2 = static_cast<void*>(ptr);

可以转换继承中对象的向上和向下(向下转换(父类指针转为子类)没有类型检查,可能会有问题:例如当多个孩子继承父类)

注: A是B的父类,B->A 继承中对象的向上转换 A->B 向下转换

不相关的、不安全的不能转换
例如: student与int
char* 与int*
int ->int或 int->int


dynamic_cast动态转换

只适用于继承链上的两个类之间的转换,不能用于其他基本变量的转换

继承的向上转换效果等同于static_cast

继承向下转换会进行动态的安全检查

  • 如果转换失败,将会返回空指针异常
class Father 
{ virtual ~Father() {} 
};  
class Son : public Father 
{
};  Father* pFa = new Son;  
Son* pSon = dynamic_cast<Son*>(pFa);  

当向下转换(父类指针转为子类)时,父类中必须包含虚函数!(static_cast 不需要)


const_cast去常转换

用于改变类型的const或volatile属性。

它常用于修改指针或引用的const属性,以便修改原本定义为const的数据。

    const char *str = "TianXi";char *p = const_cast<char*>(str);

可以用于:

  • 对常量去常,移除const属性,但修改是不安全的
  • 对常对象去常,然后可以调用各种类成员函数
  • 将 volatile 转为非 volatile,防止修饰变量编译优化

reinterpret_cast重解释类型转换

C++中的强制类型转换,有安全隐患,一般编译不过再用。

它可以把任何类型的指针转换成任何其他类型的指针,或者把任何整数类型转换成任何指针类型,或者把指针转换成整数类型。但是这种转换没有运行时类型检查来保证安全性。


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

保姆级指导0基础如何快速搭建“对话机器人”类ChatGPT

参考了CDSN上的文章&#xff0c;但发现不work&#xff0c; 不是这里有问题&#xff0c;就是那里有问题&#xff0c;查阅了大量的资料&#xff0c;做了无数次试验&#xff0c;终于整理出来了一个完整的教程&#xff0c;保可用&#xff0c;保真~~~~~如果各位遇到什么问题&#xf…

Python中lambda函数使用方法

在Python中&#xff0c;lambda 关键字用于创建匿名函数&#xff08;无名函数&#xff09;&#xff0c;这些函数的特点是简洁、一次性使用&#xff0c;并且通常用于只需要一行表达式的简单场景。下面是lambda函数的基本结构和使用方法&#xff1a; 基本语法&#xff1a; lambd…

Python更改Word文档的页面大小

页面大小确定文档中每个页面的尺寸和布局。在某些情况下&#xff0c;您可能需要自定义页面大小以满足特定要求。在这种情况下&#xff0c;Python可以帮助您。通过利用Python&#xff0c;您可以自动化更改Word文档中页面大小的过程&#xff0c;节省时间和精力。本文将介绍如何使…

【PCIe硬件】PCIe引脚定义

目录 1.PCIe引脚定义 1.1.PCie插槽 1.2.PCie引脚 1.2.1.PCie Tx Rx信号 1.2.2 辅助信号 1.PCIe引脚定义 1.1.PCie插槽

HTML学习使用js给html页面全屏水印

HTML学习使用js给html页面全屏水印 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>水印</title><style>#water-div{pointer-events:none;position:fixed;top:0;left:0;right:0;bottom:0;}.mask_div{pointer-…

【PLC】PROFIBUS(二):总线协议DP、PA、FMS

1、总线访问协议 (FDL) 1.1、多主通信 多个主设备间&#xff0c;使用逻辑令牌环依次向从设备发送命令。 特征&#xff1a; 主站间使用逻辑令牌环、主从站间使用主从协议主站在一个限定时间内 (Token Hold Time) 对总线有控制权从站只是响应一个主站的请求它们对总线没有控制…

Java八股文(SpringCloud Alibaba)

Java八股文のSpringCloud Alibaba SpringCloud Alibaba SpringCloud Alibaba Spring Cloud Alibaba与Spring Cloud有什么区别&#xff1f; Spring Cloud Alibaba是Spring Cloud的衍生版本&#xff0c;它是由Alibaba开发和维护的&#xff0c;相比于Spring Cloud&#xff0c;它在…

OpenCV4.9在iOS中安装

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;使用CUDA 为Tegra构建OpenCV-CSDN博客 下一篇&#xff1a; 警告&#xff01; 本教程可以包含过时的信息。 所需软件包 CMake 2.8.8 或更高版本Xcode 4.2 或更高版本 从 G…

Hive的安装

1.上传安装包 解压 tar zxvf apache-hive-3.1.2-bin.tar.gz# 解决Hive与Hadoop之间guava版本差异 cd /export/server/apache-hive-3.1.2-bin/ rm -rf lib/guava-19.0.jar cp /export/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/2.修改配置文件 h…

flask_Restful数据解析参数设置

add_argument 方法参数详解 add_argument方法可以指定这个字段的名字&#xff0c;这个字段的数据类 型等&#xff0c;验证错误提示信息等&#xff0c;具体如下&#xff1a; default&#xff1a;默认值&#xff0c;如果这个参数没有值&#xff0c;那么将使用这个参数 指定的默认…

短信系统开发注意事项|网页版短信后台

在开发短信系统时&#xff0c;有一些重要的注意事项需要考虑&#xff0c;以确保系统的稳定性、安全性和功能完整性。以下是一些开发短信系统时需要注意的事项&#xff1a; 合规性和法律要求&#xff1a;确保短信系统的开发符合当地法律法规和通信行业规定&#xff0c;包括用户隐…

【LVGL-文件系统移植】

LVGL-文件系统移植 ■ LVGL-文件系统移植■ 示例一&#xff1a;■ 示例二&#xff1a;视频实例■ 综合示例&#xff1a; ■ LVGL-文件系统移植 ■ 示例一&#xff1a; 在这里插入代码片■ 示例二&#xff1a;视频实例 在这里插入代码片■ 综合示例&#xff1a; /***********…

Rust基本类型

数值类型 整数类型 无符号整数只能取正数和0&#xff0c;有符号整数可以取正数负数和0。isize和usize类型取决于程序运行的计算机CPU类型&#xff0c;若CPU是32位的&#xff0c;则这两个类型是32位的&#xff0c;若CPU是64位的&#xff0c;则它们是64位的。rust整型 默认使用…

为响应国家号召,搜维尔科技开启虚拟仿真实验室设备升级改造服务

近日&#xff0c;国务院发布了关于《推动大规模设备更新和消费品以旧换新行动方案》&#xff0c;该通知的发布表现出国家对于科技创新事业的高度重视。各行各业都在积极响应国家号召&#xff0c;加快数字化转型和设备升级与更新步伐。搜维尔科技为响应国家号召&#xff0c;将开…

Redission 分布式锁原理分析

一、前言 我们先来说说分布式锁&#xff0c;为啥要有分布式锁呢? 像 JDK 提供的 synchronized、Lock 等实现锁不香吗&#xff1f;这是因为在单进程情况下&#xff0c;多个线程访问同一资源&#xff0c;可以使用 synchronized 和 Lock 实现&#xff1b;在多进程情况下&#xff…

React系列之React版本时间线和主要更新

参考&#xff1a; https://github.com/facebook/react/releases 一些博客文章 React 起源于 Facebook 的内部项目&#xff0c;在 2013 年开源正式推出。 2016.4 React15: 之前都是 v0.xx&#xff0c;到这时候直接变成 v15&#xff0c;可见对这个库的重视和发展意图。 初始渲染…

大数加法C++实现

题目&#xff1a;假设输入是2个数字&#xff0c;可能超过long long类型能表示的范围&#xff0c;请输出两数相加的运算结果。 思路&#xff1a;2个数输入的时候&#xff0c;肯定都是用string存的&#xff0c;先将短的数在末尾补0&#xff0c;使得二者一样长。然后挨个位相加&am…

单链表交叉分离,运用头插法,尾插法(算法库应用)

原文博客链接:单链表分离(头插法和尾插法的结合,理解指针变换)_3.对任务1或者2中创建的某一个单链表{a1,b1,a2,b2,...,an,bn},编写一个算法将-CSDN博客 函数实现: /************************************************** 函数名:separate_LinkList 功 能: 把一个链表,交叉新建…

电机控制杂谈——永磁同步电机中的永磁体谐波反电势

1.问题的引出 在我的谐波抑制专题中&#xff0c;讲了三种谐波抑制的策略。当时是通过增大逆变器死区来产生较大的谐波。但是在实际电机里面&#xff0c;我感觉死区的影响基本上没有。。。课题组的驱动器中&#xff0c;逆变器的非线性其实基本可以忽略不计了。 但是&#xff0…

怎么配置Dubbo的容错机制?

Dubbo的容错机制用于处理在分布式环境中可能出现的故障和异常情况&#xff0c;以保障系统的稳定性和可靠性。Dubbo提供了多种容错机制&#xff0c;可以根据实际情况进行配置。以下是几种常见的容错机制及其适用场景&#xff1a; Failover&#xff08;重试&#xff09;&#xff…