当前位置: 首页 > news >正文

C++中的cast类型转换

  1. reinterpret_cast

用法:reinpreter_cast<type-id> (expression)

type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针。

这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。reinpreter_cast是特意用于底层的强制转型,导致实现依赖(就是说,不可移植)的结果。

int n=9;
// reinterpret_cast 仅仅是复制 n 的比特位到 d,因此d 包含无用值。
double d=reinterpret_cast<double & > (n);

2. const_cast

用法:const_cast<type_id> (expression)

用于修改类型的const或volatile属性。除了const 或volatile修饰之外,type_id和expression的类型是一样的,一般用于强制消除对象的常量性。它是唯一能做到这一点的 C++ 风格的强制转型,而C不提供消除const的机制(已验证)。

常量指针被转化成非常量指针,并且仍然指向原来的对象;常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。

3. static_cast

用法:static_cast < type-id > ( expression )

该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它允许执行任意的隐式转换和相反转换动作。主要有如下几种用法:

1)用于基本数据类型之间的转换,如把int转换成char,non-const 对象转型为 const 对象(这里相反方向不可以,C++只有const_cast可以)。

2)把空指针转换成目标类型的指针。(之前的做法是用强制转换(type-id*))

3)把任何类型的表达式转换成void类型。

4)应用到类的指针上,它允许子类类型的指针转换为父类类型的指针(upercasting这是一个有效的隐式转换);也能够执行相反动作,即转换父类为它的子类(downcasting),这种转换的安全性需要开发人员来保证(主要是在非上下转型中)。

class Base {};
class Derived : public Base {};
Base *a = new Base;
Derived *b = NULL;
b = static_cast<Derived *>(a); //可以通过编译,但存在安全隐患(如访问//Derived的成员)

注意:

1.static_cast不能转换掉expression的const、volitale、或者__unaligned属性。

2.在非基本类型或上下转型中,被转换的父类需要检查是否与目的类型相一致,否则,如果在两个完全不相干的类之间进行转换,将会导致编译出错。

4. dynamic_cast

只用于对象的指针和引用,主要用于执行“安全的向下转型”,也就是说,要确定一个对象是否是一个继承体系中的一个特定类型。它是唯一不能用旧风格语法执行的强制转型,也是唯一可能有重大运行时代价的强制转型。

当用于多态类型时(包含虚函数),它允许任意的隐式类型转换以及相反过程。不过,与static_cast不同,在后一种情况里(即隐式转换的相反过程),dynamic_cast根据RTTI信息检查操作是否有效。即在转换时dynamic_cast会检查转换是否能返回一个被请求的有效的完整对象。这种检查不是语法上的,而是真实情况的检查。检测在运行时进行,如果被转换的指针不是一个被请求的有效完整的对象指针,返回值为NULL。

相关文章:

C++中的cast类型转换

reinterpret_cast用法&#xff1a;reinpreter_cast<type-id> (expression)type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数&#xff0c;也可以把一个整数转换成一个指针。这个操作符能够在非相关的类型之间转换。操作结果…...

西瓜数据集读取的详细解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...

Mac开发环境配置

一、mac 安装homebrew 1. 必要性 ​ homebrew可以通过bash命令快速安装配置开发环境&#xff0c;并且在大多数情况下可以实现环境的自动配置。&#xff08;一键安装配置&#xff09; 2. 收益 ​ 节省开发环境工具配置时间&#xff0c;提高人效。 3. 安装步骤 打开mac终端…...

概率论面试题1:玫瑰花

概率论面试题 1. 一个活动&#xff0c;n个女生手里拿着长短不一的玫瑰花&#xff0c;无序的排成一排&#xff0c;一个男生从头走到尾&#xff0c;试图拿更长的玫瑰花&#xff0c;一旦拿了一朵就不能再拿其他的&#xff0c;错过了就不能回头&#xff0c;问最好的策略&#xff1…...

【DGL】图分类

目录概述数据集定义Data LoaderDGL中的batched graph定义模型训练参考概述 除了节点级别的问题——节点分类、边级别的问题——链接预测之外&#xff0c;还有整个图级别的问题——图分类。经过聚合、传递消息得到节点和边的新的表征后&#xff0c;映射得到整个图的表征。 数据…...

时间复杂度的计算(2023-02-10)

时间复杂度的计算 时间复杂度的计算分为三大类&#xff1a;一层循环、二层循环和多层循环。 一层循环 1.找出循环趟数t及每轮循环i的变化值 2.确立循环停止的条件 3.得出t与i之间的关系 4.联立两式&#xff0c;得出结果 eg: void fun(int n) {int i0;while (i*i*i<n)i;…...

测试开发之Django实战示例 第六章 追踪用户行为

第六章 追踪用户行为在之前的章节里完成了小书签将外站图片保存至本站的功能&#xff0c;并且实现了通过jQuery发送AJAX请求&#xff0c;让用户可以对图片进行喜欢/不喜欢操作。这一章将学习如何创建一个用户关注系统和创建用户行为流数据&#xff0c;还将学习Django的信号框架…...

红米9a手动root方法

简介 已知红米6A/6/9/9A/9C/10A机器都可以快速解锁BL&#xff0c;无任何变砖风险 并且秒解锁BL后和官方解锁一样&#xff0c;无任何其他不良影响。推荐大家使用官网解锁&#xff0c;需要等待7天。 ​ BootLoader BootLoader是在操作系统内核运行之前运行的一段小程序。其实…...

Open3D 点云最小二乘法拟合平面(剔除噪声,Python版本)

除了诱惑之外,我可以抵抗任何事物。 ----王尔德 文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这个算法的思路很简单,就是通过剔除一些异常点来拟合更为合适的平面,具体过程如下所示: 1、首先使用最小二乘法拟合一个平面系数的初值。 2、计算所有有效点到拟合…...

【SpringBoot】简述springboot项目启动数据加载内存中的三种方法

一、前言一般来说&#xff0c;SpringBoot工程环境配置放在properties文件中&#xff0c;启动的时候将工程中的properties/yaml文件的配置项加载到内存中。但这种方式改配置项的时候&#xff0c;需要重新编译部署&#xff0c;考虑到这种因素&#xff0c;今天介绍将配置项存到数据…...

【一文速通】各种机器学习算法的特点及应用场景

近邻 (Nearest Neighbor)KNN算法的核心思想是&#xff0c;如果一个样本在特征空间中的K个最相邻的样本中的大多数属于某一个类别&#xff0c;则该样本也属于这个类别&#xff0c;并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定…...

多传感器融合定位十四-基于图优化的定位方法

多传感器融合定位十四-基于图优化的定位方法1. 基于图优化的定位简介1.1 核心思路1.2 定位流程2. 边缘化原理及应用2.1 边缘化原理2.2 从滤波角度理解边缘化3. 基于kitti的实现原理3.1 基于地图定位的滑动窗口模型3.2 边缘化过程4. lio-mapping 介绍4.1 核心思想4.2 具体流程4.…...

PHP基于TCPDF第三方类生成PDF文件

最近在研发招聘的系统 遇到了这个问题 转换pdf 折腾了很久 分享一下PHP基于TCPDF第三方类生成PDF文件最近遇到一个需求&#xff0c;需要根据数据库的字段生成表格式的PDF文件并发送邮箱第一步、我们先去官网上面去下载tcpdf的类&#xff1a;http://www.tcpdf.org/或者是从githu…...

SpringCloud(19):Sentinel定义资源的方式

Sentinel除了基本的定义资源的方式之外,还有其他的定义资源的方式,具体如下: 抛出异常的方式定义资源返回布尔值方式定义资源异步调用支持注解方式定义资源主流框架的默认适配1 抛出异常的方式定义资源 Sentinel中的SphU包含了try-catch风格的API。用这种方式,当资源发生了…...

前端 ES6 之 Promise 实践应用与控制反转

Promise 主要是为解决程序异步处理而生的&#xff0c;在现在的前端应用中无处不在&#xff0c;已然成为前端开发中最重要的技能点之一。它不仅解决了以前回调函数地狱嵌套的痛点&#xff0c;更重要的是它提供了更完整、更强大的异步解决方案。 同时 Promise 也是前端面试中必不…...

LightGBM

目录 1.LightGBM的直方图算法(Histogram) 直方图做差加速 2.LightGBM得两大先进技术(GOSS&EFB) 2.1 单边梯度抽样算法(GOSS) 2.2 互斥特征捆绑算法(EFB) 3.LightGBM得生长策略(leaf-wise) 通过与xgboost对比&#xff0c;在这里列出lgb新提出的几个方面的技术 1.Ligh…...

Science:北京脑研究中心李莹实验室揭示性满足感的分子机制

短暂的社交经历&#xff08;例如&#xff0c;性经历&#xff09;可导致内部状态的长期变化并影响社会行为&#xff0c;如交配、攻击。例如&#xff0c;在成功交配射精后&#xff0c;许多物种迅速表现出对交配倾向的抑制有数小时、数天或更长时间&#xff0c;这种效应称为性满足…...

Element UI框架学习篇(三)

Element UI框架学习篇(三) 实现简单登录功能(不含记住密码) 1 准备工作 1.1 在zlz包下创建dto包,并创建userDTO类(传输对象) package com.zlz.dto;import lombok.Data;/* DTO 数据传输对象 用户表的传输对象 调用控制器传参使用 VO 控制器返回的视图对象 与页面对应 PO 数据…...

尚硅谷的尚融宝项目

先建立一个Maven springboot项目 进来先把src删掉&#xff0c;因为是一个父项目&#xff0c;我们删掉src之后&#xff0c;pom里配置的东西&#xff0c;也能给别的模块使用。 改一下springboot的版本号码 加入依赖和依赖管理&#xff1a; <properties><java.versi…...

12 Day:内存管理

前言&#xff1a;今天我们要完成我们操作系统的内存管理&#xff0c;以及一些数据结构和小组件的实现&#xff0c;在此之前大家需要了解我们前几天一些重要文件的内存地址存放在哪&#xff0c;以便我们更好的去编写内存管理模块 一&#xff0c;实现ASSERT断言 不知道大家有没有…...

linux基本功系列之lsof命令实战

文章目录前言一. lsof命令介绍二. 语法格式及常用选项三. 参考案例3.1 显示系统打开的文件3.2 查找某个文件相关的进程3.3 列出某个用户打开的文件信息3.4 列出某个程序进程所打开的文件信息3.5 查看某个进程号打开的文件3.6 列出所有的网络连接3.7 列出谁在使用某个端口3.8 恢…...

基础篇:02-SpringCloud概述

1.SpringCloud诞生 基于前面章节&#xff0c;我们深知微服务已成为当前开发的主流技术栈&#xff0c;但是如dubbo、zookeeper、nacos、rocketmq、rabbitmq、springboot、redis、es这般众多技术都只解决了一个或一类问题&#xff0c;微服务并没有一个统一的解决方案。开发人员或…...

【软件测试】软件测试工作上95%会遇到的问题,你遇到多少?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 1、测试负责人要进行…...

4.5.4 LinkedList

文章目录1.特点2.常用方法3.练习:LinkedList测试1.特点 链表,两端效率高,底层就是链表实现的 List接口的实现类&#xff0c;底层的数据结构为链表&#xff0c;内存空间是不连续的 元素有下标&#xff0c;有序允许存放重复的元素在数据量较大的情况下&#xff0c;查询慢&am…...

Python之FileNotFoundError: [Errno 2] No such file or directory问题处理

错误信息&#xff1a;FileNotFoundError: [Errno 2] No such file or directory: ../AutoFrame/temp/report.xlsx相对于当前文件夹的路径&#xff0c;其实就是你写的py文件所在的文件夹路径&#xff01;python在对文件的操作时&#xff0c;需要特别注意文件地址的书写。文件的路…...

C语言中耳熟能详的printf与scanf

没有什么比时间更有说服力了&#xff0c;因为时间无需通知我们就可以改变一切了。---余华《活着》大家好&#xff0c;今天给大家分享的是C语言中的scanf与printf函数&#xff0c;一提起这两个函数&#xff0c;大家可能觉得这不就是打印和输入嘛&#xff1f;有什么可以说的&…...

【数据结构】复杂度讲解

目录 时间复杂度与空间复杂度&#xff1a;&#xff1a; 1.算法效率 2.时间复杂度 3.空间复杂度 4.常见时间复杂度以及复杂度OJ练习 时间复杂度与空间复杂度&#xff1a;&#xff1a; 什么是数据结构? 数据结构中是计算机存储,组织数据的方式,指相互之间存在一种或多种特定关…...

JAVA-线程池技术

目录 概念 什么是线程&#xff1f; 什么是线程池&#xff1f; 线程池出现背景 线程池原理图 JAVA提供线程池 线程池参数 如果本篇博客对您有一定的帮助&#xff0c;大家记得留言点赞收藏哦。 概念 什么是线程&#xff1f; 是操作系统能够进行运算调度的最小单位。&am…...

【C++】从0到1入门C++编程学习笔记 - 提高编程篇:STL常用算法(算术生成算法)

文章目录一、accumulate二、fill学习目标&#xff1a; 掌握常用的算术生成算法 注意&#xff1a; 算术生成算法属于小型算法&#xff0c;使用时包含的头文件为 #include <numeric> 算法简介&#xff1a; accumulate // 计算容器元素累计总和 fill // 向容器中添加元…...

【C++】static成员

&#x1f499;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;C 目录 概念 特性 出个题 概念 声明为static的类成员称为类的静态成员&#xff0c;用static修饰的成员变量&#xff0c;称之为静态成员变量&#xff1b; 用static修饰的成员函数&#xff0c;称之为静态…...

口腔医院网站做优化/关键词分析

随着人工智能的发展&#xff0c;人脸识别技术在各个领域的场景应用中日益丰富&#xff0c;在多个场景可以看到人脸识别系统的应用落地&#xff0c;在社区、企业、工地、安防等方面。而现在随着各地智慧校园的建设&#xff0c;有些学校逐步引入人脸识别技术&#xff0c;通过校园…...

免费做优化的网站建设/如何做品牌推广方案

前言 2020年是转折的一年&#xff0c;上半年疫情原因&#xff0c;很多学android开发的小伙伴失业了&#xff0c;虽找到了一份工作&#xff0c;但高不成低不就&#xff0c;下半年金九银十有想法更换一份工作&#xff0c;很多需要大厂面试经验和大厂面试真题的小伙伴&#xff0c…...

东莞网站建设服务商/seo在线优化排名

开发前言 环境配置参考&#xff1a; Ubuntu20.04下ESP32环境搭建 VSCode开发配置&#xff08;使用本地已经存在的配置&#xff09; 搭建环境、编译烧写 VSCode运行 hello world 常用的插件命令&#xff1a; Show Examples Projects :查找例子 Build your project&#xff1a;编…...

typecho wordpress比较/天津seo公司

下面为您介绍MySQL触发器new old的相关知识&#xff0c;供您参考学习&#xff0c;如果您在MySQL触发器方面遇到过类似的问题&#xff0c;不妨一看&#xff0c;相信对您会有所帮助。mysql触发器new old:"NEW . column_name"或者"OLD . column_name".这样在技…...

宁波梅山建设局网站/搜索引擎优化的常用方法

CWinThread::m_pMainWnd该成员变量去存储你的线程主窗口对象。当和m_pMainWnd 相关的窗口被关闭后&#xff0c;MFC会自动终止你的线程。如果该线程是应用程序主线程&#xff0c;程序也将会被终止。如果该数据成员为NULL&#xff0c;应用程序CWinApp对象的主窗口将用来决定什么时…...

做日程表网站/深圳百度公司地址在哪里

C# 中的"yield"使用 yield是C#为了简化遍历操作实现的语法糖&#xff0c;我们知道如果要要某个类型支持遍历就必须要实现系统接口IEnumerable&#xff0c; 这个接口后续实现比较繁琐要写一大堆代码才能支持真正的遍历功能。举例说明 using System; using System.C…...