在类似下面的代码中使用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)
是的你可以.虽然我没有在你的具体例子中看到这样做的重点.只是称之为
derived->foo();
Run Code Online (Sandbox Code Playgroud)
没有任何演员表会产生完全相同的效果.static_cast在某种情况下,某种情况将由虚拟调用机制隐式执行.
请注意,您static_cast不会以任何方式抑制呼叫的"虚拟"性质.
这实际上让我想知道你的问题到底是什么.为什么你甚至会问它?你想做什么?在您的代码示例中真正代表您要做的事情?