隱式轉換

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;
        }
    };