在C++中,static_cast是一種用于顯式類型轉換的運算符。它可以將一種類型轉換為另一種類型,但只能在具有明確定義的轉換關系的類型之間進行轉換。
static_cast的用法有以下幾種:
基本數據類型的轉換:可以將一種基本數據類型轉換為另一種基本數據類型,例如將int轉換為double。
int a = 10;
double b = static_cast<double>(a);
類層次結構中的指針或引用轉換:可以將基類的指針或引用轉換為派生類的指針或引用。
class Base {};
class Derived : public Base {};
Base* basePtr = new Derived;
Derived* derivedPtr = static_cast<Derived*>(basePtr);
隱式轉換的逆向轉換:可以將具有隱式轉換關系的類型進行逆向轉換。
int a = 10;
void* voidPtr = &a;
int* intPtr = static_cast<int*>(voidPtr);
轉換函數指針:可以將一個函數指針轉換為另一個函數指針類型。
void function1() {}
void (*funcPtr1)() = &function1;
void (*funcPtr2)() = static_cast<void (*)()>(funcPtr1);
需要注意的是,static_cast無法執行動態類型檢查,因此在進行指針或引用的轉換時,如果轉換不合法,將會導致未定義的行為。為了避免此類問題,在進行類層次結構的轉換時,推薦使用dynamic_cast進行動態類型檢查。