隱式轉換
static_cast
可以執行任何隱式轉換。static_cast
的這種使用偶爾會有用,例如在以下示例中:
-
將引數傳遞給省略號時,預期引數型別不是靜態已知的,因此不會發生隱式轉換。
const double x = 3.14; printf("%d\n", static_cast<int>(x)); // prints 3 // printf("%d\n", x); // undefined behaviour; printf is expecting an int here // alternative: // const int y = x; printf("%d\n", y);
如果沒有顯式型別轉換,
double
物件將被傳遞給省略號,並且會發生未定義的行為。 -
派生類賦值運算子可以像這樣呼叫基類賦值運算子:
struct Base { /* ... */ }; struct Derived : Base { Derived& operator=(const Derived& other) { static_cast<Base&>(*this) = other; // alternative: // Base& this_base_ref = *this; this_base_ref = other; } };