【发布时间】:2026-01-31 01:00:01
【问题描述】:
为什么这是不合法的:
class Base
{
public:
Base(){};
virtual ~Base(){};
};
class Derived : public Base{};
void takeDerived(Derived * c){};
// main
void(*ptr)(Base*) = static_cast<void(*)(Base*)>(&takeDerived); // doesn't work
// but this work ok, as well as reinterpret_cast
// void(*ptr)(Base*) = (void(*)(Base*))(&takeDerived);
Derived 是一个Base。为什么不能在函数参数中强制转换?例如,即使没有强制转换,我也可以轻松做到这一点:
void takeBase(Base* c){};
takeBase(new Derived{});
【问题讨论】:
-
那将违反基本的理智。
takeDerived期望Derived *,但您的ptr将接受 anyBase-派生指针!
标签: c++ casting function-pointers