C++中的虚函数必须实现吗?

virtual function in C++ must be implemented?

class A
{
public:
    A(){}
    virtual void func();
};
class B:public A
{
    void func(){}
}

如果func没有实现,我定义一个A的对象时会出现连接错误。所以为什么?我还没有打电话给 func

if the func isn't implemented, there will be linkage error when I define one object of A. So why?

因为标准规定在这种情况下必须定义函数(强调我的):

[class.virtual]

A virtual function declared in a class shall be defined, or declared pure ([class.abstract]) in that class, or both; no diagnostic is required ([basic.def.odr]).

由于缺少非纯虚函数的定义不符合标准,标准不要求工具链能够成功生成可执行文件。

如果链接器能够诊断出丢失的定义,那么您可以认为自己很幸运,因为标准并未强制要求进行诊断。如果消息含糊不清,好吧,这就是为什么不强制执行诊断的原因。链接器很难找出源代码损坏的原因。

必须实现虚函数,除非是纯虚函数