C++四种类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast

1、static_cast

static_cast 用于数据类型的强制转换,强制将一种数据转换成另一种数据, 编译阶段是类型检查;

用法:static_cast<type_id>(express)

  • 用于类层次结构中基类和派生类之间指针或引用的转换(上行转换,即派生类的指针或引用转换成基类,是安全的;下行转换,即基类的指针或引用转换为派生类,没有动态类型检查,是不安全的);
  • 用于基本数据类型之间的转换;
  • 把空指针转换成目标类型指针;
  • 把任何类型的表达式转换为void类型。
int a = 3;
int b = 2;
double res = static_case<double>(a) / static_cast<double>(b);

2、dynamic_cast

  • dynamic_cast是运行时处理的,运行时要进行类型检查;
  • 不能用于内置的基本数据类型的强制转换;
  • dynamic_cast转换成功返回值是指向类的指针或引用,否则返回NULL;
  • 使用dynamic_cast进行转换,基类中一定要有虚函数;
  • 下行转换时具有类型检查的功能,比static_cast更安全

3、const_cast

const_cast 用于修改类型的const或volatile属性。通常用来去除const、 volatile属性,去除的对象必须是指针或引用。

  • 常量指针被转化成非常量指针
  • 常量引用被转化成非常量引用
  • 常量对象被转化成非常量对象

用法:const_cast<type_id>(expression)

const in a = 10
const int *p = &a;
*q = const_cast<int *>(p);
*q = 20

4、reinterpret_cast

reinterpret_cast用于改变指针或引用的类型、将指针或引用转换为一个足够长度的整形、将整形转换为指针或引用类型

即,可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针

用法:reinterpret_cast<type_id>(express)

type_id必须是一个指针、引用、算术类型、函数指针或成员指针。

int *a = new int;
double *d = reinterpret_cast<double *>(a)

引用链接:

https://www.cnblogs.com/Allen-rg/p/6999360.html

C++ 类型转换(强制类型转换)相关推荐

  1. 【C++基础语法 2】——类型转换[自动类型转换/强制类型转换]

    2. 类型转换 2.1 C++转换方式 自动类型转换(隐式转换):遵循一定的规则,由编译系统自动完成 强制类型转换:把表达式的运算结果强制转换成所需的数据类型 C++自动执行很多类型的转换: 将一种算 ...

  2. C语言数据类型转换(自动类型转换 强制类型转换)

    数据类型转换就是将数据(变量.数值.表达式的结果等)从一种类型转换为另一种类型. 自动类型转换 自动类型转换就是编译器默默地.隐式地.偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生. ...

  3. Java类型转换(自动类型转换+强制类型转换)

    一. 自动类型转换(隐式类型转换) 整型.实型(常量).字符型数据可以混合运算.运算中,不同类型的数据先转化为同一类型,然后进行运算. 自动转换从低级到高级. 自动转换有以下规律: 1.小的类型自动转 ...

  4. Java 自动类型转换,强制类型转换

    一. 自动类型转换[熟知] 举个例子,便于理解 public static void main(String[] args) {byte a = 20;int b = a;}java遵循类型匹配原则 ...

  5. C语言数据类型转换(自动类型转换+强制类型转换)

    自动类型转换 自动类型转换就是编译器默默地.隐式地.偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生. 1)将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换,例如 floa ...

  6. 基本数据类型转换 || 自动类型转换与强制类型转换

    基本数据类型转换 自动类型转换 强制类型转换

  7. Java的知识点6—— 强制类型转换、基本类型转化时常见错误和问题、 简单的键盘输入和输出

     强制类型转换 强制类型转换,又被称为造型,用于显式的转换一个数值的类型.在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出. public class Test2 {pu ...

  8. C语言基础教程之强制类型转换

    C 强制类型转换 强制类型转换是把变量从一种类型转换为另一种数据类型.例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型.您可以使用强制类型 ...

  9. C语言基础专题 - 数据类型与强制类型转换(编辑中)

    C语言 - 数据类型与强制类型转换 1.C数据类型 可以参考的相关知识链接: C语言基础专题 - 指针 C语言基础专题 - 数组 C语言基础专题 - 字符串 C语言基础专题 - 结构体 C语言基础专题 ...

  10. 一文了解Java强制类型转换

    本专栏由十年Java开发经验专家编写,本专栏定位于Java基础知识,既适合新手入门又适合老鸟巩固基础知识.一共99节课,每节课只需几毛钱. 作者简介:笔名seaboat,擅长工程算法.人工智能算法.自 ...

最新文章

  1. spring boot 整合mybatis 无法输出sql的问题
  2. 【深度学习】基于Pytorch的线性模型概念辨析和实现(二)
  3. python做什么项目好_推荐两个牛逼的Python项目
  4. 前端学习(1857)vue之电商管理系统电商系统之登录过程和token
  5. 用移动智能设备访问Ossim系统
  6. 纯干货 | UI界面中按钮设计汉堡按钮\菜单
  7. 2018-11-30
  8. pandas去掉html标签,用Pandas清理HTML表
  9. linux设备/驱动的注册
  10. html的3d旋转木马插件,纯js超酷3D旋转木马特效插件
  11. “我没干过华为OD的岗位,但它是外包,我就要怼”,什么心态?
  12. 【解决】Python程序运行时所占内存越来越大
  13. jquery 遍历java对象,js/jquery遍历对象和数组的方法分析【forEach,map与each方法】...
  14. linux下md5sum命令的使用
  15. 一、树莓派双色LED实验
  16. oracle的权限授予,在Oracle模式上授予用户所有权限
  17. 解决问题spring加载配置文件aop:before 报错: Cannot create inner bean '(inner bean)' of type...
  18. 黑苹果 显卡驱动 hd4000
  19. A* Pathfinding for Beginners
  20. Arduino基础项目六:制作报警器

热门文章

  1. 神策数据徐美玲:数字化运营,从 1 到 100 的跨越
  2. 反馈速度小于 200ms!“弹窗”功能让你极速触达用户内心
  3. 除了分析引擎 2.0,神策再发一波儿新功能!
  4. DAY19-Pillow制作验证码
  5. 启用vsftpd服务
  6. IT 人士如何避免中年危机?
  7. 在阿里云服务器(Ubuntu系统)下使用WordPress搭建博客网站教程
  8. 三百元月薪的小资生活
  9. (转)浅析当今视频文件的格式
  10. same things betewen university and companies