您当前的位置: 首页 >  c++

RuiH.AI

暂无认证

  • 0浏览

    0关注

    274博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++学习 十九、类型转换符

RuiH.AI 发布时间:2022-03-12 15:27:04 ,浏览量:0

C++学习 十九、类型转换符
  • 前言
  • static_cast
  • dynamic_cast
  • const_cast
  • reinterpret_cast

前言

本篇学习C++中的四个类型转换符号,static_cast,dynamic_cast,const_cast,reinterpret_cast。

C++使用以上这四种转换代替C风格的强制类型转换。

static_cast

static_cast用于低风险的转换,例如:

  • 自动类型转换,如int转double
  • 向上转换,如派生类指针转基类指针
  • 向下转换,如基类指针转派生类指针(但不安全)
  • 定义了转换构造函数和转换函数的类与类型转换
  • void指针与其它指针转换

使用方法是static_cast (expression)

    Base* pb;
    Derived* pd;
    pd = static_cast(pb);

而不同内置类型指针转换、整型转指针等高风险转换不能使用static_cast。

static_cast在编译时进行检查,转换失败时报错。

dynamic_cast

dynamic_cast用于继承类之间的转换:

  • 向上转换
  • 向下转换

dynamic_cast由于向上转换是安全的,不会在运行期间检查。而向下转型不安全,因此将在运行期间检查安全性:

    Base* pb;
    Derived* pd;
    pd = dynamic_cast(pb);

对于向上转换,dynamic_caststatic_cast是类似的,对于向下转换,dynamic_cast更安全。

dynamic_cast是运行效率较低的转换。

注意:向下转换要求基类必须有虚函数。

const_cast

const_cast用于去除表达式的const/volatile:

    const int a = 6;
    int* pa = const_cast(&a);
    *pa = 5;
    std::cout             
关注
打赏
1658651101
查看更多评论
0.0433s