为什么标准不允许“ virtual void funcFoo()= 0 {}”?

| [我找不到合适的答案。如果已经回答了,请指向正确的链接。] 我知道做这样的事情是非法的,
class Base
{
public:
    virtual void funcFoo() = 0 {}   //illegal. should be defined outside the class body
    virtual ~Base() {}
};
但这在VS2008上工作正常。 我想知道为什么标准不允许这样做? 在android上,我看到我必须像这样定义内联函数,
inline void Base::funcFoo() {}
不只是
void Base::funcFoo() {}
这里的隐式内联和显式内联有什么区别?编译器有什么不同?     
已邀请:
我认为对此没有太多答案。它曾经出现过一次(可能是在Usenet上,而不是在SO上-我不记得了),所以我做了一些尝试。我并没有真正提出任何建议。据我所知,这就是Bjarne最初设计的方式。尽管可以更改,但我找不到向委员会提出任何更改建议,也没有任何迹象表明委员会甚至在辩论,讨论或考虑过它。我的猜测是,它被认为是“足够好”,因此没有人愿意花很多(任何努力)来更改它。     
根据第§10.4/ 2节,这是不正确的形式,该节指出(在注释中),   函数声明不能​​同时提供纯说明符和定义
[Example:

struct C {
   virtual void f() = 0 { }; // ill-formed
};

—end example]
希望它能回答您的问题。 现在,请参阅@John Dibling提出的第一条评论(如下),很遗憾,您的“为什么”问题的答案不在标准中,如果
\"that is ill-formed\"
不是您可接受的答案。语言语法根本不允许。:-)     
第一个问题已经回答-标准根本不允许这样做。 第二个问题是:   在android上,我看到我必须   像这样定义内联函数,
inline void Base::funcFoo() {}
  不只是
void Base::funcFoo() {}
  是什么   隐式内联和   显式内联在这里?是什么   编译器干什么不同? 不同之处在于,第一个变体可以放置在头文件中,而头文件可以被多个源文件包含。第二个变体必须恰好放在一个源文件中。     

要回复问题请先登录注册