顯式型別轉換

所有六種型別轉換都有一個共同點:

  • 轉換為左值引用型別,如 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。請參閱移動語義