• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C++ 强制类型转换

武飞扬头像
想要飞的小菜鸟
帮助1

在C 中,有四种强制类型转换:

1、static_cast:这是最常见的类型转换。它可以用于基本数据类型之间的转换,也可以用于指向父类和子类之间的指针或引用的转换。

static_cast可以实现下列转换:

①基本数据类型之间的转换。

②将任何类型转换为void类型。

③把空指针转换成目标类型的指针。

④用于类层次结构中基类和派生类之间指针或引用的转换。

⑤向上转换(派生类转换为基类)是安全的;向下转换(基类转换为派生类)没有动态类型检查,是不安全的。

例如:

  1.  
    int i = 10;
  2.  
    double d = static_cast<double>(i); // 整型转为浮点型

2、dynamic_cast:主要用于处理基类和派生类之间的转换。如果类型转换不安全,它会返回空指针NULL。这是唯一个一个地种在运行时执行类型检查的转换。

例如:

  1.  
    Base *b = new Derived();
  2.  
    Derived *d = dynamic_cast<Derived*>(b); // 基类指针转为派生类指针
  3.  
    if (d != nullptr) {
  4.  
    // 转换成功
  5.  
    } else {
  6.  
    // 转换失败
  7.  
    }

3、const_cast:这种类型转换用于修改常量对象的常量属性。需要注意的是,使用 const_cast 去掉常量性质并修改数据可能导致未定义的行为。

例如:

  1.  
    int num = 100;
  2.  
    const int* p1 = &num;
  3.  
    //将常量指针转换为普通类型指针,去除const属性
  4.  
    int* p2 = const_cast<int*>(p1);
  5.  
    *p2 = 200;
  6.  
    int a = 100;
  7.  
    const int& ra = a;
  8.  
    //将常量引用转换为普通类型引用,去除const属性
  9.  
    int& ra1 = const_cast<int&>(ra);
  10.  
    ra1 = 200;

注意:

const_cast<>只能用于转换指针或引用。

4、reinterpret_cast:这种类型转换允许进行任何指针或整型的转换。它可以将任何类型的指针转换为任何其他类型的指针,也可以将任何类型的指针转换

例如:

  1.  
    char c = 'a';
  2.  
    int d = reinterpret_cast<int&>(c);
  3.  
    int* p=NULL;
  4.  
    float* q = NULL;
  5.  
    p = reinterpret_cast<int*>(q);
  6.  
    q = reinterpret_cast<float*>(q);

注意:

reinterpret_cast要转换的类型必须是指针类型、引用或算术类型。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiafjai
系列文章
更多 icon
同类精品
更多 icon
继续加载