使用final类说明符时,最终函数说明符是多余的吗?

Bar*_*ett 6 c++ c++11

是否有任何理由指定一个函数,因为final该类已经final?或者这是多余的?

class B
{
public:
    virtual void f();
};

class D final : public B
{
public:
    virtual void f() final; // Redundant final?
};
Run Code Online (Sandbox Code Playgroud)

说一下这是一个很好的经验法则:从创建整个类开始final,只有final在需要派生类和/或覆盖特定函数时才切换到创建单独的函数?

use*_*670 5

这绝对是多余的,因为将整个类标记为final使得不可能从该类派生并因此覆盖任何内容。

9个班级[班级]

  1. 如果一个类用 class-virt-specifier final 标记,并且它在基子句(第 10 条)中显示为基类型说明符,则该程序格式错误。

因此编译器甚至不会费心检查从final类派生的类是否实际上尝试覆盖任何内容。