最终说明符对单独的声明和定义没有影响
final specifier has no effect with separate declaration and definition
我注意到 final
关键字有一些奇怪的行为。当我这样做时:
class A {
public:
virtual ~A() = default;
virtual void foo() final {}
};
class B : public A {
public:
void foo() override {}
};
如我所料,在 B
中重写 foo
时出现编译器错误。但是当我单独定义和声明 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)
我注意到 final
关键字有一些奇怪的行为。当我这样做时:
class A {
public:
virtual ~A() = default;
virtual void foo() final {}
};
class B : public A {
public:
void foo() override {}
};
如我所料,在 B
中重写 foo
时出现编译器错误。但是当我单独定义和声明 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)