顯式型別轉換
所有六種型別轉換都有一個共同點:
- 轉換為左值引用型別,如
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);
-
在算術型別和列舉型別之間,以及不同的列舉型別之間。請參閱列舉轉換
-
從指標到派生類的成員,到指向基類成員的指標。指向的型別必須匹配。請參閱派生到基本轉換以獲取指向成員的指標
Version >= C++ 11
- 從左值到 x 值,如
std::move
。請參閱移動語義 。