为什么新版本的C++不允许在类声明中定义纯方法?
问题描述:
为什么MSVC++ 2015和其早期版本允许一个pure virtual method
的定义在类声明内,但在GCC 4.9
,我想MSVC++ 2017
不允许:为什么新版本的C++不允许在类声明中定义纯方法?
#include <iostream>
class A{
public:
virtual void Foo() = 0;
};
class B: public A {
public:
virtual void Foo() = 0 { std::cout << "B::Foo()" << std::endl;
}; // Allowed on MSVC 2015 and old versions
//virtual void Foo() = 0; // on newer versions
};
//void B::Foo(){
// std::cout << "B::Foo()" << std::endl;
//} // Ok here!
class C : public B{
public:
void Foo(){
B::Foo();
std::cout << "C::Foo()" << std::endl;
}
};
int main(){
// A aObj; // error
// B bObj; // error
C cObj; // correct
cObj.Foo();
std::cout << std::endl;
std::cin.get();
return 0;
}
答
的standard明确提到,这是不允许的(例如, C++ 14,第10.4节/ 2)
函数声明不能同时提供纯说明符和一个 定义 - 注完] [实施例:结构13 C {虚拟无效F()= 0 { }; // ill-formed}; - 结束示例]
我不认为语言语法严格地允许它。我同意它应该。 –
@NeilButterworth:该程序在MsvC++ 2015上顺利运行! – Raindrop7
可能是因为MSVC没有实现在标准中描述的语法 - 大多数编译器都没有。 –