我注意到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 {}
};

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

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

最佳答案

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

关于c++ - 最终说明符对单独的声明和定义无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49612214/

10-11 23:17
查看更多