C++有了四個強制類型轉化的操作符。
1、static_cast
之前C語言會發生的隱式類型轉化用此操作符,它適用於意義相近的類型之間的相互轉化。
double d = 1.11;
int a = static_cast<int>(d);
2、reinterpret_cast
用於無關類型的相互轉換。
int a = 10;
int *p = reinterpret_cast<int*>(a);
3、const_cast
用於需要取消const屬性的類型轉換。
const int a = 2;
int *p = const_cast<int*>(&a);
*p = 3;
//*p 3,a 2的原因是cout<<a的值不是在內存裏面取得,而是被編譯器做了優化。
//volatile const int a = 2;這樣就沒有問題了,a的const屬性沒了,a變成了3
4、dynamic_cast
用於父->子指針和引用的轉換。它會先檢查是否安全,不安全就返回nullptr。
子->父對象、指針和引用都支持,這是語法直接支持的,不是類型轉換,不會產生臨時變量。