显式类型转换

所有六种类型转换都有一个共同点:

  • 转换为左值引用类型,如 dynamic_cast<Derived&>(base),产生左值。因此,当你想要对同一个对象执行某些操作但将其视为不同的类型时,你将转换为左值引用类型。
  • 转换为右值引用类型,如 static_cast<string&&>(s),产生右值。
  • 转换为非引用类型(如 (int)x)会产生一个 prvalue,可以将其视为正在转换的值的副本,但其类型与原始值不同。

reinterpret_cast 关键字负责执行两种不同的不安全转换:

static_cast 关键字可以执行各种不同的转换:

  • 基于派生的转换

  • 可以通过直接初始化完成的任何转换,包括隐式转换和调用显式构造函数或转换函数的转换。有关详细信息,请参见此处此处

  • 对于 void,它丢弃了表达式的值。

    // on some compilers, suppresses warning about x being unused
    static_cast<void>(x);
    
  • 在算术类型和枚举类型之间,以及不同的枚举类型之间。请参阅枚举转换

  • 从指针到派生类的成员,到指向基类成员的指针。指向的类型必须匹配。请参阅派生到基本转换以获取指向成员的指针

  • void*T*

Version >= C++ 11

  • 从左值到 x 值,如 std::move。请参阅移动语义