虚函数申明为static报错
class Foo
{
public:Foo()=default;static virtual ~Foo(){}
};int main()
{Foo foo;return 0;
};
main.cpp:10:25: error: member ‘~Foo’ cannot be declared both virtual and static
static virtual ~Foo()
代码编译会报错,不允许同时声明virtual和static
分析
虚函数,是一种特殊的成员函数,用来实现运行时多态;一定要通过对象来调用,有隐藏的this指针。
静态成员函数与任何实例无关,而是类的一个属性;可以不通过对象来调用,没有隐藏的this指针。
因此报错的关键就是static成员没有this指针。
static function
是静态决议, 在编译期就确认函数入口地址virtual function
是动态决议, 在运行期动态确认函数入口