C++有四种强制类型转换运算符:

  1. static_cast: 可用于基本类型的转换,或者将指针转换为其他基本类型的指针,如:

    1
    2
    int i = 10;
    double d = static_cast<double>(i);
  2. dynamic_cast: 用于基类和派生类之间的转换,包含了类型检查,只有在确定安全的情况下才会进行转换,否则就会 return nullptrdynamic_cast 只能用于含有虚函数的类,且只能用于指针或引用。

  3. const_cast: 用于修改类型的 const 和volatile 修饰词,对于 const 变量,可使用 const_cast 去除 const属性,然后才能改变变量的值;

    1
    2
    3
    const int i = 10;
    int* p = const_cast<int*>(i);
    *p = 20;
  4. reinterpret_cast: 是一种底层的强制类型转换,可以将任意类型的指针转换为任何其他类型的指针,reinterpret 会对变量进行机器(位)级别的重新解释,不进行任何类型检查和转换,属于非常危险的操作。