C++笔记 - 强制类型转换

166 阅读1分钟

在C++中存在四种强制类型转换:

  • dynamic_cast。 一般用于继承多态关系的类型间转换,能提供类型转换检查功能。

    #include <iostream>
    
    class base {
        public:
            virtual void show(){}
    };
    
    class derived : public base {
        void show() final {}
    };
    
    int main(void) {
        derived a;
        base *b = dynamic_cast<base*>(&a);
        derived *d = dynamic_cast<derived*>(b);
    }
    

    上面的例子,没有实现多态特性进行下行转换会报错。实现了多态特性下行转换不会报错。


  • static_cast:一般用于继承关系的类型转换或兼容类型之间转换。

    #include <iostream>
    
    class base {};
    
    class derived : public base {};
    
    int main(void) {
        derived a;
        derived *b = static_cast<derived *>(&a);
    }
    

    在基类与派生类转换关系中,使用static_cast无论是否实现多态特性都不会报错。static_cast相对于dynamic_cast类型检查更宽松。


  • const_cont:去掉const属性。

    #include <iostream>
    int main(void) {
        const int *a = nullptr;
        int *b = const_cast<int*>(a);
    }
    

  • reinterpret_cast:一般用于没有继承关系且不兼容类型的之间,强制转换力度最大。

    #include <iostream>
    int main(void) {
        const int *a = nullptr;
        size_t b = reinterpret_cast<size_t>(a);
    }