C++转型

77 阅读1分钟

C++11提供了四种模板类用来转型。

1. const_cast

它可以改变常量属性,将常量指针/应用/对象转化为非常量对象。它发生在编译器。

2. static_cast

它用于一些常见类型的转换,如char->int或者double->int。在类这块,它可以安全的实现将派生类指针转化为父类指针。

3. dynamic_cast

它主要用于将父类指针/引用转化为子类指针/引用,它发生在运行时期。主要用于安全的向下转换。

4. reinterpret_cast

它主要用于无关类型的转换,它产生一个新的值,该值与原来的值有着相同的比特位。是一种不安全的类型转换,也不跨平台,应谨慎使用。

#include <bits/stdc++.h>
using namespace std;

class Base {
public:
  int x;

  virtual void show() {
    std::cout << "this is Base" << std::endl;
  }
};

class Derived: public Base {
public:
  int y;

  virtual void show() override {
    std::cout << "this is Derived" << std::endl;
  }
};

int main() {
    Base* b = new Base();
    b->x = 11;
    Derived* d = new Derived();
    d->y = 99;
    b->show();
    d->show();

    //上行转换
    Base* d2b = static_cast<Base*>(d);
    d2b->show();
    //下行转换
    Derived* b2d = static_cast<Derived*>(b);
    b2d->show();
    
    cout << b2d->y << endl;
};

image.png