【c++】四种类型转换的用法

news2025/7/22 21:41:35

这里写目录标题

  • static_cast 无条件转换,静态类型转换
  • const_cast 去掉类型的const或volatile属性
  • dynamic_cast 有条件转换,动态类型转换,运行时检查类型安全(转换失败返回NULL)
  • reinterpret_cast 仅重新解释类型,但没有进行二进制的转换

static_cast 无条件转换,静态类型转换

1.基本数据类型之间的转换
bool,char,short,int ,float,long,double

using namespace std;
int main()
{
	int a = 10;
	float b = 12.2;
	printf("%d\n", b);
	printf("%d\n", static_cast<int>(b));
	return 0;
}

在这里插入图片描述
2.枚举类型之间的转换

using namespace std;
int main()
{
	enum A { A1 = 1, A2 = 2 };
	enum B { B1 = 3, B2 = 4 };
	A a = A1;
	int c = 2;
	a = static_cast<enum A> (c);
	cout << a << endl;
}

不建议超出范围转换
在这里插入图片描述

using namespace std;
int main()
{
	enum A { A1 = 1, A2 = 2,A3 = 3,A4 = 4 };
	enum B { B1 = 3, B2 = 4 };
	A a = A1;
	B b = B2;
	a = static_cast<enum A> (b);
	cout << a << endl;

}

3.指针之间的转换

1.指针类型转void * , void * 再转换回原来的类型

using namespace std;
int main()
{
	int* a = new int;
	void* p = static_cast<void*>(a);
	cout << a << endl;
	cout << p << endl;


}

在这里插入图片描述
2.不同类型之间的指针的转换
直接转换是不允许的
在这里插入图片描述
通过void * 作媒介是可以的,不过不安全
在这里插入图片描述
在这里插入图片描述
4.变量转换为常量
在这里插入图片描述
5.基类和派生类之间的转换

基类的指针指向派生类的对象的时候,派生类的对象的转换是隐式的

在这里插入图片描述
不过最好显式的写上,因为是基类的指针,所以调用的都是基类的函数
在这里插入图片描述

派生类的指针指向基类对象时,是不允许的
在这里插入图片描述
我们可以使用static_cast 进行转换

在这里插入图片描述
6.两个没有关系之间的类的转换
在这里插入图片描述

const_cast 去掉类型的const或volatile属性

去掉类型的const
在这里插入图片描述
去掉类型的volatile

const int volatile a = 5;
	int* p;
	p = const_cast<int*>(&a);
	(*p)++;
	cout << a << endl;
	cout << *p << endl;
	cout << *(&a) << endl;
	return 0;

如果不使用const_cast的话,就会报错
在这里插入图片描述

dynamic_cast 有条件转换,动态类型转换,运行时检查类型安全(转换失败返回NULL)

dynamic_cast 动态转换 将基类的指针(必须是指向派生类对象的基类指针才能转化成功)安全的转换为派生类的指针或引用,并用派生类的指针或引用调用非虚函数
该类型要包含虚函数,才能转换

如下面所示,当把父类对象的地址转化给子类指针时,因为不安全,所以通过dynamic_cast一强转就为NULL。

class Base
{
public:
	virtual ~Base(){}
};
class Child :public Base
{
	~Child(){}
};
int main()
{
	Base* b = new Base();
	Child* c1 = static_cast<Child*> (b);
	Child* c2 = dynamic_cast<Child*>(b);//为NULL

	Base* b2 = new Child();
	Child* c3 = static_cast<Child*> (b2);
	Child* c4 = dynamic_cast<Child*>(b2);

	return 0;
}

reinterpret_cast 仅重新解释类型,但没有进行二进制的转换

reiterpret_cast 指针转换为另外一种指针,不修改指针变量存储格式,重新解释指针类型,也可以将指针转换为整型值

using namespace std;
int main()
{
	float ff = 3.4f;
	float* pf = &ff;
	int* pi = reinterpret_cast<int*>(pf);
	cout << *pi << endl;
	cout << *pf << endl;
	long j = reinterpret_cast<long>(pi);
	cout << j << endl;

}

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

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

相关文章

离散数学(十二):关系的幂运算与关系的性质

1 关系的幂运算 1&#xff09;幂运算的定义 2&#xff09;幂运算的求法 幂运算有两种求法&#xff0c;基于矩阵的方法和基于关系图的方法。我们之前学过关系的表示方法有三种&#xff1a;集合、矩阵、关系图。那么同样&#xff0c;这些方式也可以运用于关系的计算中。 需…

leaflet教程029: 加载KML文件(代码示例)

第029个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载kml文件,将图形显示在地图上。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式安装leaflet-plugins本示例引用的kml文件代码示例源代码(共79行)专栏目标…

【容器网络】跨主通信网络实现方法之host-gw实现原理

以上是VXLAN在跨主通信的实现原理&#xff0c;本文讲述的是host-gw的实现原理。 目录 Host-gw 基本原理 flannel的host-gw 数据包传输过程 calico的host-gw calico架构 BGP Peer Node-to-NodeMesh Route Reflector IPIP Host-gw 在容器生态中,提供 Host-gw解决方案…

Seata AT模式TransactionHook会被莫名删除?

前言 兄弟们&#xff0c;刚刚又给seata社区修了一个BUG&#xff0c;有用户提了issue反应TransactionHook在某些情况下不会被调用&#xff1a; 该用户在issue中已经指出了相关问题所在&#xff1a; 下面我们来看一下到底是什么原因导致了上述BUG的产生。 问题定位 根据用户的…

最新JMeter面试题,紧扣面试实际要求,看完拿下20K

JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言&#xff0c;JMeter小巧轻便且免费&#xff0c;逐渐成为了主流的性能测试工具&#xff0c;是测试人员必须要掌握的工具之一。 下面小编给大家总结了22年最新30道关于JMeter的面试题&#xff0c;…

基于51单片机的温度报警系统

功能&#xff1a; 设计一个温度报警系统&#xff0c;可以设定温度上、下限的值&#xff0c;到达设定值时&#xff0c;蜂鸣器响&#xff1b;按键设定有设置、确定、取消、减少与增加功能&#xff0c;LCD1602实时显示相关温度信息 设定界面&#xff1a; 温度超过设定值&#xf…

美国能源部国家实验室将量子计算用于关键能源研究

​ &#xff08;图片来源&#xff1a;网络&#xff09; 量子计算是一种新兴的、强大而有前途的且能快速解决复杂问题的新力量&#xff0c;美国能源部国家实验室NETL的专家正准备将量子计算投入到关键能源的研究课题上&#xff0c;以实现环境可持续和能源应用的无限未来。 量子…

【MySQL | 运维篇】05、MySQL 分库分表之 使用 MyCat 分片

目录 一、垂直拆分 1.1 场景 1.2 准备 1.3 配置 1). schema.xml 2). server.xml 1.4 测试 1). 上传测试SQL脚本到服务器的 /root/sql 目录 2). 执行指令导入测试数据 3). 查询用户的收件人及收件人地址信息(包含省、市、区)。 4). 查询每一笔订单及订单的收件地址信息…

html页面广告5秒之后跳过

首页 - <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width; in…

【51】分布式计算:如果所有人的大脑都联网会怎样?

【计算机组成原理】学习笔记——总目录 【51】分布式计算&#xff1a;如果所有人的大脑都联网会怎样&#xff1f;引言一、从硬件升级到水平扩展二、理解高可用性和单点故障三、总结【个人总结的重点】引言 现在我们每天在用的个人 PC、智能手机&#xff0c;乃至云上的服务器&a…

Nginx反向代理配置

关键字&#xff1a; 反向代理&#xff0c;负载均衡 第一步&#xff1a;官网下载windwos版本nginx 下载地址链接:nginx: download 如下图所示 第二步&#xff1a;解压启动nginx 备注&#xff1a;启动前先查看进程是否占用 80端口 netstat ano | findstr 80tasklist |findstr “…

linux下Nerdtree安装方法

目录 1.下载Nerdtree 2. linux下安装 3. 成功享受吧 1.下载Nerdtree 百度网盘下载&#xff0c;地址为链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;07e3 --来自百度网盘超级会员V4的分享 github方式下载&#xff0c;地址为 https://github.com/scrooloose/ner…

【附源码】Python计算机毕业设计蔬果批发网络平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

HECTF2022 学习笔记

HECTF2022 MISC笔记 目录HECTF2022 MISC笔记小鲨鱼来喽~舞者的秘密你把我的flag藏哪去了。。小鲨鱼来喽~ 查看最后面的http数据包&#xff0c;发现flag 舞者的秘密 先爆破出压缩包密码&#xff0c;用010打开&#xff0c;发现文件开头是gif的格式 将图片格式改为gif&#xf…

Mysql之常用函数、聚合函数合并(unionunion all)【第四篇】

大纲&#xff1a; 1、函数的简介 MySQL函数是 MySQL 数据库提供的内部函数&#xff0c;这些内部函数可以帮助用户更加方便地处理表中的数据。函数就像预定的公式一样存放在数据库里&#xff0c;每个用户都可以调用已经存在的函数来完成某些功能。 简单来说&#xff0c;函数就是…

Sublime Text v4.0(4143)破解方法

[TOC](Sublime Text v4.0(4143)破解方法) 版本Sublime Text v4.0(4143) 所需软件 Sublime Text v4.0(4143)下载地址&#xff1a;https://www.sublimetext.com/download_thanks?targetwin-x64 010 Editor下载地址(其他十六进制编辑器也可以) https://download.sweetscape.co…

基于ISO13209(OTX)实现EOL下线序列

一 OTX是什么&#xff1f; OTX&#xff0c;全称Open Test sequence eXchange format&#xff0c;即开放式测试序列交换格式&#xff0c;国际标准&#xff1a;ISO13209&#xff0c;是专为汽车行业制定的序列开发标准。在车辆诊断、自动化标定和ECU测试等领域有广泛应用。OTX不仅…

使用Jmeter进行性能测试的操作方法

前言 JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c; 下载地址&#xff1a; Apache JMeter - Download Apache JMeter 下载好之后 &#xff0c;他得需要 jdk配置 好环境变量 才能运行。 这是很重要的一点&#xff0c; 。 安装 一系…

高数 |【23数一 李林六套卷】卷二 自用思路 及 知识点 整理

23数一 李林六套卷 —— 自用思路 及 知识点 整理 ——【卷二】 以下均为个人复盘。 部分思路讲解参考于 6-2_哔哩哔哩_bilibili 第二套T22_哔哩哔哩_bilibili T1:泰勒 ※ T2:高阶导 想泰勒展开 或 本题画图 法一:泰勒 法二:画图

哈夫曼树及其应用

一、基本概念 给定N个权值作为N个叶子结点&#xff0c;构造一棵二叉树&#xff0c;若该树的带权路径长度达到最小&#xff0c;称这样的二叉树为最优二叉树&#xff0c;也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树&#xff0c;权值较大的结点离根较近。 ——…