美文网首页
C++类型转换

C++类型转换

作者: delta1037 | 来源:发表于2020-04-29 11:41 被阅读0次

    一、C风格的强制类型转换

    eg:

    char *str = "hello";
    void *p = (void *)str;
    

    二、C++风格的强制类型转换

    const_cast ,static_cast ,dynamic_cast ,reinterpret_cast

    2.1 const_cast

    功能:const_cast主要用于修改指针。例如const char *p形式

    使用模板:

    const_cast < 新类型 > ( 表达式 )
    

    常用于:

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

    2.2 static_cast

    功能:static_cast的作用于C语言风格的强制类型转换效果基本一致

    使用模板:

    static_cast < 新类型 > ( 表达式 )
    

    常用于:

    • 类层次结构中基类和派生类之间的引用或者指针的转换
    • 基本数据类型之间的转换

    注:

    • static_cast与C语言的强制类型转换一样,没有运行时类型检查,有安全隐患
    • 基类与父类之间的转换,上行转换(派生类转为基类)是安全的;下行转换(基类转为派生类)是由于没有动态类型检查是不安全的
    • 基本数据类型之间的转换的安全性需要开发者来进行维护
    • static_cast不能转换掉原有类型的const、volatile、或者 __unaligned属性。(前两种可以使用const_cast 来去除)
    • c++ primer 中说道:c++ 的任何的隐式转换都是使用 static_cast 来实现的

    2.3 dynamic_cast

    功能:沿继承层级向上、向下及侧向,安全地转换到其他类的指针和引用。

    使用模板:

    dynamic_cast < 新类型 > ( 表达式 )
    
    • 新类型:指向完整类型的指针,到完整类类型的引用,或指向(可选的cv限定)void的指针
    • 表达式:若新类型为引用,则为完整类类型的左值(<C++11)/泛左值(>=C++11)表达式;若新类型为指针,则指向完整类类型的指针纯右值

    2.4 reinterpret_cast

    功能:通过重新解释底层位模式在类型间转换。

    使用模板:

    reinterpret_cast < 新类型 > ( 表达式 )        
    

    参考文献

    【1】c++ 四种强制类型转换介绍
    【2】zh.cppreference.com/w/cpp/language/const_cast
    【3】zh.cppreference.com/w/cpp/language/static_cast
    【4】zh.cppreference.com/w/cpp/language/dynamic_cast
    【5】zh.cppreference.com/w/cpp/language/reinterpret_cast

    相关文章

      网友评论

          本文标题:C++类型转换

          本文链接:https://www.haomeiwen.com/subject/kbcgwhtx.html