C++ 类型转换

在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);
  }

如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.

Leave a Reply

Your email address will not be published. Required fields are marked *