static_cast<type>
是 C++ 中的一種型別轉換方式,用於在編譯期進行靜態型別轉換。與 C 風格的強制型別轉換不同,static_cast
更加安全和明確,因為它只允許特定的型別轉換,避免了潛在的錯誤和歧義。
static_cast
的用法
static_cast<type>(expression)
將 expression
轉換為 type
型別。常見的使用場景包括:
-
基本型別轉換:用於將不同的基本資料型別相互轉換,例如
int
轉換為float
或double
。int i = 10; float f = static_cast<float>(i); // int 轉換為 float
-
指標和引用的上行轉換(upcasting):在繼承體系中,
static_cast
可以安全地將派生類指標或引用轉換為基類指標或引用。class Base {}; class Derived : public Base {}; Derived d; Base* b = static_cast<Base*>(&d); // Derived* 轉換為 Base*
-
顯式轉換回原始型別:可以用來將列舉、
void*
等非相關型別轉換為基本型別(前提是型別是相容的)。void* ptr = &i; int* intPtr = static_cast<int*>(ptr); // 將 void* 轉換回 int*
-
避免隱式轉換不當發生:有時建構函式或過載運算子可能引發隱式型別轉換,用
static_cast
可以使轉換更清晰、避免歧義。
static_cast
的限制
- 不能用於轉換不相關的指標型別。
- 不檢查轉換的型別安全性。比如,將基類指標強制轉換為派生類指標時需要確保型別正確,否則會導致未定義行為。
示例
#include <iostream>
class Base {};
class Derived : public Base {};
int main() {
int num = 10;
double d = static_cast<double>(num); // int 轉換為 double
Derived derived;
Base* base = static_cast<Base*>(&derived); // Derived* 轉換為 Base*
std::cout << d << std::endl; // 輸出 10.0
return 0;
}
總結
static_cast
是一種型別安全的顯式轉換工具,適合編譯期可確定的轉換需求。