最终说明符对单独的声明和定义没有影响

时间:2018-04-02 13:25:26

标签: c++ c++11 final virtual-method

我注意到final关键字出现了一些奇怪的行为。当我这样做时:

class A {
public:
    virtual ~A() = default;
    virtual void foo() final {}
};

class B : public A {
public:
    void foo() override {}
};

我在foo覆盖B时遇到编译错误,正如我所料。但是当我单独定义和声明A :: foo

class A {
public:
    virtual ~A() = default;
    virtual void foo() final;
};

void A::foo() {}

class B : public A {
public:
    void foo() override {}
};

错误消失了。是应该是它还是编译器错误?

//编辑:gcc版本4.9.2(Debian 4.9.2-10 + deb8u1)

1 个答案:

答案 0 :(得分:2)

两个片段都应该生成有关覆盖final函数的编译器错误。这似乎是一个编译器错误。 gcc 4.9.2编译并gcc 4.9.3生成错误。