c++类型转换

c++类型转换

​ c++的类型转化分为两种:

​ 一种是隐式转换,像int型和float型相加的时候,int型会自动转化成为float型的。

​ 一种是显式转换,是要利用转换符来强制类型转换的。

显式转换符

  • static_cast
  • dynamic_cast
  • const_cast
  • reinterpret_cast

static_cast

  • 用于非多态类型之间的转换,不提供运行时的检查来确保转换的安全性。(long转int型的时候发生截断)
    主要有如下

    1. 基本数据类型转换
    2. int转换成enum
    3. 基类和子类之间指针和引用的转换

      • 上行转换,把子类的指针或引用转换成父类,这种转换是安全的(通常使用默认转换)。不需要在用转换符了。
      • 下行转换,把父类的指针或引用转换成子类,这种转换是不安全的,也需要程序员来保证(通常使用dynamic_cast)。

dynamic_cast

  • 用于类的指针、类的引用或者void *转化。

    主要用于以下三种情况:

    1. 上行转换,把子类的指针或引用转换成父类,与static_cast相同。但是一般是默认隐式转换。
    2. 下行转换,把父类的指针或引用转换成子类,比static_cast安全。
    3. 交叉转换,兄弟之间指针转换,static_cast会出现编译错误。
  • 如果是指针,进行正确的转换,获得对应的值;否则返回NULL,如果是引用,则在运行时就会抛出异常;

    如果是菱形继承的话,要转换到爷爷级别去的话,必须指定上行转换的路径,否则就会转换失败,因为不知道如何转换。

const_cast

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

    const_cast的作用是用来改变表达式里面的常量性(const)或易变性(volatile)

    是去const的属性,但是其实是不安全的,会破坏const存在的意义。

reinterpret_cast(万能的强制类型转换符)

  • 从指针类型到一个足够大的整数类型

    从整数类型或者枚举类型到指针类型

    从一个指向函数的指针到另一个不同类型的指向函数的指针

    从一个指向对象的指针到另一个不同类型的指向对象的指针

    从一个指向类函数成员的指针到另一个指向不同类型的函数成员的指针

    从一个指向类数据成员的指针到另一个指向不同类型的数据成员的指针


小结:

符号转换对象作用转换时机
static_cast基本类型的转换,指针,引用类似于c语言的小括号转化功能编译期间
const_castconst类型的对象,指针,引用去掉const的属性当前编译期间
dynamic_cast类的指针,类的引用多态的时候,父类指针和引用转换成为子类的指针和引用运行期间,指针转换失败返回NULL,引用转换失败返回异常。
reinterpret_cast指针,应用等等万能的强制类型转换编译期间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值