虚函数和static_cast

Fro*_*art 2 c++

在类似下面的代码中使用static_cast对多态类进行操作后,我可以安全地调用虚函数吗?还是UB?

#include <iostream>

class Base
{
public:
   virtual void foo() { std::cout << "Base::foo() \n"; }
};

class Derived : public Base
{
public:
   virtual void foo() { std::cout << "Derived::foo() \n"; }
};

int main()
{
   Base* derived = new Derived;
   Derived* _1 = static_cast<Derived*>(derived);
   _1->foo();
}
Run Code Online (Sandbox Code Playgroud)

AnT*_*AnT 5

是的你可以.虽然我没有在你的具体例子中看到这样做的重点.只是称之为

derived->foo();
Run Code Online (Sandbox Code Playgroud)

没有任何演员表会产生完全相同的效果.static_cast在某种情况下,某种情况将由虚拟调用机制隐式执行.

请注意,您static_cast不会以任何方式抑制呼叫的"虚拟"性质.

这实际上让我想知道你的问题到底是什么.为什么你甚至会问它?你想做什么?在您的代码示例中真正代表您要做的事情?