纯虚函数是那些具有纯说明符( = 0;
)的虚成员函数
C++03 的第 10.4 条第 2 段告诉我们什么是抽象类,作为旁注,如下:
[注意:函数声明不能同时提供纯说明符和定义——尾注] [示例:
struct C {
virtual void f() = 0 { }; // ill-formed
};
——结束示例]
对于那些不太熟悉这个问题的人,请注意纯虚函数可以有定义,但上述条款禁止此类定义出现内联(词法类内)。(对于定义纯虚函数的用途,您可能会看到,例如,这个 GotW)
现在对于所有其他种类和类型的函数,它可以提供一个类内定义,而且这个限制乍一看似乎是绝对人为的和莫名其妙的。想想看,第二眼和随后的一瞥似乎都是这样 :) 但我相信如果没有具体原因,限制就不会存在。
我的问题是:有人知道这些具体原因吗?也欢迎好的猜测。
笔记:
- MSVC 确实允许 PVF 具有内联定义。所以不要惊讶:)
- 这个问题中的词
inline
不是指inline关键字。它应该是词汇上的意思