纯虚函数是指那些具有虚拟性并带有纯虚拟限定符(= 0;
)的成员函数。
C++03标准第10.4节第2段告诉我们什么是抽象类,并且作为一个附注,以下内容:
[注意:函数声明不能同时提供纯虚限定符和定义—结尾注释][例如:
struct C {
virtual void f() = 0 { }; // ill-formed
};
—end example]
对于那些不太熟悉此问题的人,请注意纯虚函数可以有定义,但是上述规定禁止这样的定义内联(在类中按词法顺序)。 (您可以查看定义纯虚函数的用途,例如这篇 GotW 文章)
对于所有其他类型的函数,都可以提供内联定义,在类内也是允许的。这个限制乍一看似乎非常人为和莫名其妙。仔细一想,第二次甚至更多次观察时,它似乎也是如此 :) 但我相信如果没有特定的原因,就不会有这种限制。
我的问题是:有没有人知道这些具体的原因?欢迎提出好的猜测。
注:
- MSVC 允许将 PVF(pure virtual functions) 定义为内联。所以不要惊讶:)
- 本问题中的单词
inline
不是指 inline 关键字。它应该意味着 按词法顺序在类中
virtual void f() = 0 try { } catch(...) { }
- Johannes Schaub - litb