纯虚拟和内联定义

Niv*_*hus 8 c++

考虑:

struct device{
    virtual void switchon() = 0 {}
};

int main()
{

}
Run Code Online (Sandbox Code Playgroud)

我写了类似于以下的代码,它给出了一个错误:

函数定义编译的纯指定符因-Wfatal-errors而终止.

当我问他时,他向我展示了标准中的以下引用:

在类中声明的虚函数应在该类中定义或声明为纯(10.4),或两者兼有; 但不需要诊断(3.2).

我似乎无法理解这意味着什么,我认为这在某种程度上是不相关的.

PS:如果这不是相关的引用,请引导我到正确的引用,以便我可以有更好的反驳.

Pra*_*rav 5

纯虚函数可能有一个定义(在类定义之外).这完全是可选的.但是你要做的事情是完全错误的,因为

C++ 03 [部分10.4/2]说:

[注意:函数声明 不能同时提供纯指定符和定义 -end note] [示例:

struct C {
    virtual void f() = 0 { }; // Ill-formed
}
Run Code Online (Sandbox Code Playgroud)

但是你可以自由地写

struct device{
    virtual void switchon() = 0;
};

void device::switchon() { } // Definition {optional}

int main()
{

}
Run Code Online (Sandbox Code Playgroud)

  • @Nivhus:它意味着`一个虚函数可以在类中定义,可以声明为纯,也可以声明为纯,也可以定义(在类定义之外){optional}`. (2认同)