我注意到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/