c++强制类型转换

c语言风格的强制类型转换比较简单,都是采用 (type)var 的方式进行转换。这样的转换在某些场景是非常危险的,并且编译器不会对可能出现的错误进行警告,很可能在程序运行过程中造成内存越界,也可以将常量转换为变量,导致程序崩溃。c++完全兼容c,这样的编码方式也是可以使用的,但是c++自己提供了四种强制类型转换,完善了这一缺点。在c++中应该多使用c++提供的强制类型转换。

四种类型转换

  • static_cast

    • 1.基本用法:static_cast expression
    • 2.使用场景:
      • a、用于类层次结构中基类和派生类之间指针或引用的转换
        • 上行转换(派生类---->基类)是安全的;
        • 下行转换(基类---->派生类)由于没有动态类型检查,所以是不安全的。
      • b、用于基本数据类型之间的转换,如把int转换为char,这种带来安全性问题由程序员来保证
      • c、把空指针转换成目标类型的空指针
      • d、把任何类型的表达式转为void类型
    • 3.使用特点
      • a、主要执行非多态的转换操作,用于代替C中通常的转换操作
      • b、隐式转换都建议使用static_cast进行标明和替换
  • dynamic_cast

    • 1.基本用法:dynamic_cast expression
    • 2.使用场景:只有在派生类之间转换时才使用dynamic_cast,type-id必须是类指针,类引用或者void*。
    • 3.使用特点:
      • a、基类必须要有虚函数,因为dynamic_cast是运行时类型检查,需要运行时类型信息,而这个信息是存储在类的虚函数表中,只有一个类定义了虚函数,才会有虚函数表(如果一个类没有虚函数,那么一般意义上,这个类的设计者也不想它成为一个基类)。
      • b、对于下行转换,dynamic_cast是安全的(当类型不一致时,转换过来的是空指针),而static_cast是不安全的(当类型不一致时,转换过来的是错误意义的指针,可能造成踩内存,非法访问等各种问题)
      • c、dynamic_cast还可以进行交叉转换
  • const_cast

    • 1.基本用法:const_castexpression
    • 2.使用场景:
      • a、常量指针转换为非常量指针,并且仍然指向原来的对象
      • b、常量引用被转换为非常量引用,并且仍然指向原来的对象
    • 3.使用特点:
      • a、cosnt_cast是四种类型转换符中唯一可以对常量进行操作的转换符
      • b、去除常量性是一个危险的动作,尽量避免使用。一个特定的场景是:类通过const提供重载时,一般都是非常量函数调用const_cast将参数转换为常量,然后调用常量函数,然后得到结果再调用const_cast 去除常量性。
  • reinterpret_cast

    • 1.基本用法:reinterpret_castexpression
    • 2.使用场景:不到万不得已,不用使用这个转换符,高危操作
    • 3.使用特点:
      • a、reinterpret_cast是从底层对数据进行重新解释,依赖具体的平台,可移植性差
      • b、reinterpret_cast可以将整型转换为指针,也可以把指针转换为数组
      • c、reinterpret_cast可以在指针和引用里进行肆无忌惮的转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值