隐式转换

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