强制类型转换有哪几种?

news2024/9/20 12:23:24

目录

1.static_cast

2.dynamic_cast

3.const_cast

4.reinterpret_cast


每种类型转换操作符都有其特定的应用场景和限制,应根据实际需求选择合适的转换方式。特别是 reinterpret_cast,由于它的类型安全性很低,使用时需格外小心。

1.static_cast

  • 用于执行在编译时已知的、相对安全的转换,例如基本数据类型之间的转换(如 int 转为 double)、父类与子类之间的转换(在继承关系中,但不涉及多态)、以及空指针和空类型之间的转换。
  • 语法:static_cast<new_type>(expression)
  • 例子:
double d = 3.14;
int i = static_cast<int>(d);  // d 被转换为 3

2.dynamic_cast

  • 用于执行在运行时确定的类型安全的转换,主要用于处理多态(polymorphic)类型之间的转换。
  • 只能用于具有虚函数的类(多态类型)之间的指针或引用转换。
  • 如果转换失败,指针转换返回 nullptr,引用转换抛出 std::bad_cast 异常。
  • 语法:dynamic_cast<new_type>(expression)
  • 例子:
class Base {
    virtual void func() {}
};
class Derived : public Base {};
Base* basePtr = new Derived;
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);  // 成功转换

3.const_cast

  • 用于添加或移除 constvolatile 属性。它是唯一可以移除 const 限制的转换方式。
  • 不能用于改变基本类型的 const 限定,尝试修改被 const 限定的变量会导致未定义行为。
  • 语法:const_cast<new_type>(expression)
  • 例子:
const int* p = new int(10);
int* modifiable = const_cast<int*>(p);  // 移除了 `const` 属性

4.reinterpret_cast

  • 用于执行低级别的、几乎没有类型安全保证的转换,例如指针类型之间的转换、指针与整数之间的转换。
  • 通常用于硬件相关编程或处理底层数据结构。
  • 语法:reinterpret_cast<new_type>(expression)
  • 例子:
int* p = new int(65);
char* ch = reinterpret_cast<char*>(p);  // 将 int 指针转换为 char 指针

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

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

相关文章

芜湖小孩自闭症寄宿制学校:释放潜能,开启未来

在探索儿童成长的无限可能中&#xff0c;有一群特别的孩子&#xff0c;他们以自己的节奏和方式感知着这个世界&#xff0c;那就是自闭症儿童。自闭症&#xff0c;一个逐渐为社会所熟知的领域&#xff0c;其背后承载着无数家庭的期望与挑战。在广州这座充满温情与活力的城市中&a…

成立LDAR检测公司的条件和投资额度(扩项)-泄漏检测与修复CMA认证

一、成立检验检测机构 1&#xff09;独立法人&#xff1a;营业执照&#xff08;经营范围包括检验检测机构服务的相关内容&#xff0c;不得有影响其检验检测活动公正性的经营项目&#xff0c;如&#xff1a;生产&#xff0c;销售等&#xff09; 2&#xff09;内设机构&#…

比传统机器学习更先进的深度学习神经网络的二分类建模全流程教程

比传统机器学习更先进的深度学习神经网络的二分类建模全流程分析教程 深度学习介绍和与传统机器学习的区别 深度学习&#xff08;Deep Learning&#xff09;是一种机器学习的分支&#xff0c;基于多层神经网络模型&#xff0c;能够自动从大量数据中学习特征并进行预测。深度学…

MES生产执行管理

技术架构&#xff1a; 基于RuoYi前后端分离版本开发 有需要该项目的小伙伴可以添加我Q&#xff1a;598748873&#xff0c;备注&#xff1a;CSDN 功能描述&#xff1a; 系统管理、主数据、物料产品管理、工作站设置、生产管理、生产排产、质量管理、生产排班、节假日/工作日…

自动驾驶自动泊车场景应用总结

自动泊车技术是当前智能驾驶技术的一个重要分支,其目标是通过车辆自身的感知、决策和控制系统,实现车辆在有限空间内的自主泊车操作。目前自动泊车可分为半自动泊车、全自动泊车、记忆泊车、自主代客泊车四种产品形态,其中, 根据搭载传感器和使用场景的不同,全自动泊车又可…

Redis Universe: 探索无边界的数据处理星系

目录 引言 一、NoSQL的崛起 - 数据处理的新纪元 1.1 关系型数据库与NoSQL数据库概述 1.2 NoSQL数据库的兴起 1.3 RDBMS与NoSQL的比较 二、Redis星系导论 2.1 Redis的定义与历史 2.2 Redis的特性 2.3 Redis的应用场景 2.4 Redis缓存实现流程 三、构建你的第一座数据库…

yolo-word复现

github下载代码&#xff1a;https://github.com/AILab-CVC/YOLO-World 配置环境&#xff1a; 官方的方式 当然也可以按照官方给的配置方式去安装库&#xff0c;我也试了&#xff0c;出现小问题了。 我这边是从我本身的yolov8的环境克隆过来的&#xff0c;然后安装我环境里没有…

java坏境搭建

目录 安装 步骤1 步骤2 步骤3 步骤4 环境变量 1、在桌面“计算机”或“此电脑”图标上右键&#xff0c;选择“属性”&#xff0c;进入控制面板的计算机系统页面后&#xff0c;点击“高级系统设置”&#xff0c;不同操作系统可能界面不同&#xff1a; 2、点击“环境变量”…

C++基础知识7 list

list 1. list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list的迭代器失效 2.1 模拟实现list 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 l…

三步设置NAS的内网穿透

现在的NAS很多&#xff0c;NAS中可以提供的dock服务也很多&#xff0c;博主也试了一下&#xff0c;可以把家里的服务提供到公网上&#xff1a; 1、博主有一个“终身免费的花生壳域名”&#xff1a; 2、博主家有一个华为的AX3 PRO路由器&#xff0c;在路由器中设置花生壳域名的…

DBA运维小技巧之存储篇-Oracle服务器根目录满了怎么处理(2)迁移至新存储空间

1 前情提要 话说上次DBA小倩通过删除home lv&#xff0c;把空间扩给了/分区&#xff0c;问题暂时得到了解决。 没过几天&#xff0c;领导找到小倩下达任务&#xff0c;客户说数据库在本地磁盘空间太小了又快要满了&#xff0c;由于之前用的服务器本地磁盘&#xff0c;性能也比…

如何利用Samba跨平台分享Ubuntu文件夹

1.安装Samba 终端输入sudo apt install samba 2.配置Samba 终端输入sudo vim /etc/samba/smb.conf 打开配置文件 滑动文件到最底下 输入以下内容 [Share] # 要共享的文件夹路径 path /home/xxx/sambashare read only no browsable yes编辑完成后按一下Esc按键后输入:wq回…

CRE6255MS (5V2.1A电源芯片方案)

CRE6255MS产品是一款内置高压 MOS 功率开关管12W原边控制的开关电源芯片。CRE6255MS较少的外围元器件、较低的系统成本设计出高性能的交直流转换开关电源。CRE6255MS 提供了极为全面和性能优异的智能化保护功能&#xff0c;包括逐周期过流保护、软启动、芯片过温保护、输出过压…

用SpringBoot进行通义千问接口调用同步方法和异步流式多轮回复方法

同步效果就不展示了,这里展示更常用的异步,多轮异步流式效果展示如下: 第一轮回答,此时没有会话id,需要雪花算法生成插入数据库 第二轮问题以及结果内容组合 1、同步版本环境准备以及代码 需要开通阿里大模型服务,如果没有开通服务,单独的去生成 key 是无效的。 阿里…

春秋云境之CVE-2022-30887

一.靶场环境 1.下载靶场环境 根据题目提示&#xff0c;此靶场存在文件上传漏洞。 2.启动靶场环境 我们可以看到是一个登录页面&#xff0c;我们尝试进行登录 二.登录页面 1.尝试进行登录 我们发现用户名必须是邮箱&#xff0c;那么弱口令肯定不行&#xff0c;我们可以看到…

Redis的缓存穿透、缓存雪崩、缓存击穿怎么解决

Redis在实际使用中是会遇到很多问题的&#xff0c;例如今天说到的缓存穿透、缓存雪崩、缓存击穿。 缓存穿透&#xff1a; 缓存穿透是指客户端请求的数据在redis缓存和数据中都不存在&#xff0c;这样缓存永远都不会生效&#xff0c;这些请求都会打到数据库当中&#xff0c;对…

对中文进行文本分类的常用方法

一&#xff1a;关键词分类和基于规则的分类 关键词分类和基于规则的分类是两种常见的文本分类方法&#xff0c;它们可以应用于中文文本的分类。下面我将详细介绍这两种方法&#xff1a; 关键词分类 原理&#xff1a;这种方法通过识别文本中出现的特定关键词或短语来确定文本的…

数据清洗-缺失值填充-随机森林填充

目录 一、安装所需的python包二、采用随机森林算法进行缺失值填充2.1可直接运行代码2.2以某个缺失值数据进行实战代码运行过程截屏&#xff1a;填充后的数据截屏&#xff1a; 三、随机森林算法 (Random Forest) 介绍3.1随机森林的定义3.2随机森林的基本思想3.3随机森林的工作原…

国产动画《缉妖录之启程篇》定档国庆,吴承恩化身热血男主

9月15日&#xff0c;国产原创动画《缉妖录之启程篇》正式定档。动画由是船长影视制作&#xff0c;阿杰、谷江山等配音&#xff0c;于腾讯视频、极光TV播出&#xff0c;10月3日上午10:00点起更新两集&#xff0c;10月4日起&#xff0c;会员每日10:00更新一集&#xff0c;非会员每…

杨敏博士:基于法律大模型的智能法律系统

9月26日&#xff0c;杨敏博士受邀参加人工智能助力法治化营商环境发展论坛暨得理法律大模型发布会并发表了“基于法律大模型的智能法律系统”主题演讲。杨博士是香港大学计算机博士&#xff0c;担任中科院深圳先进院高性能数据挖掘实验室主任&#xff0c;是深圳市海外高层次人才…