【寒江雪】C++四种类型转换

来源:互联网 发布:农业科技网络书屋网站 编辑:程序博客网 时间:2024/05/29 17:25

C++四种类型转换

  C++兼容自C语言,C语言中的强制类型转换方式自然也会有,但C++有新的四种类型转换方式,分别是以下四种:
- reinterpret_cast
- static_cast
- dynamic_cast
- const_cast

reinterpret_cast

  reinterpret_cast能够将一种指针类型转换为另一种指针类型,能够将指针类型转换为整数类型。反过来也成立.这种转换就比较自由,但是是不安全的,需要使用者在使用它时能够清楚地知道自己在做什么。
  它可以强制给指针赋值,直接按二进制整数形式将地址赋值给任意类型的指针形式。而在使用的时候,即便两个类没有继承关系而有相似的结构,在编译之后能够有相同的二进制序列的话,转换后的指针,仍然能正常使用,但如果没有相同的二进制序列,访问就会混乱,得到的结果就无法满足预期。
  但自由的语法会带来自由的思想,怎么使用是使用它的人的想法。

static_cast

  static_cast能够支持隐式转换和相反的动作,是与C风格最接近的转换类型。它能够将基类指针转换为派生类指针,也能够将派生类指针转换为基类指针。因此这种转换方式不能说是安全的,需要使用者在使用它的时候想一想。

dynamic_cast

  dynamic_cast是一种只针对指针和引用类型的转换方式,同时要求被转换的类型具有多态性,也就是类必须具有虚函数,否则会报语法错误。
  它允许将派生类指针转换为基类指针,允许将基类指针转换为派生类指针,将基类指针转换为派生类指针的时候,会进行动态检查,如果转换失败,得到的结果是NULL。
  它允许将派生类引用转换为基类引用,允许将基类引用转换为派生类引用,如果转换失败,会抛出bad_cast异常。

const_cast

  const_cast是一种取消变量const属性的转换方式,也是一种增加变量const属性的转换方式。

验证代码

  验证代码我会上传到github上,这几天复习C++基础知识,巩固基础语法和基础算法与基础数据结构。
  github传送门


Copyright© by 寒江雪1719
Date:2017.8.19

原创粉丝点击