为什么较新版本的C++不允许在类声明中定义纯方法?

Why newer versions of C++ don't allow definition of pure method inside class declaration?

本文关键字:声明 定义 方法 新版本 C++ 不允许 为什么      更新时间:2023-10-16

为什么MSVC 2015及其较早版本允许在类声明中定义pure virtual method,但在GCC 4.9上,我猜MSVC++ 2017不允许这样做:

    #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;
    }

标准明确地提到不允许的标准(例如C 14,§10.4。/2)

函数声明不能同时提供纯指标和 定义 - 终点注] [示例:struct C {虚拟void f()= 0 { };//不良形式}; - 结束示例]