隐式转换
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; } };