C++11 FDIS指出:
如果一个虚函数被标记为override关键字,但它并没有覆盖其基类中的任何成员函数,则程序将会是非法的。[例如:
如果`B::f`没有被标记为虚拟的话,那会怎样呢?那么程序是否非法?或者`override`会被忽略吗?我在标准文本中找不到对这种情况的处理方法。
struct B { virtual void f(int); }; struct D : B { void f(long) override; // error: wrong signature overriding B::f void f(int) override; // OK };
更新1/2(已合并):我向C++编辑请求调查此事。感谢Johannes指出这一点。
- “void f(long) override”不会覆盖一个函数,特别是没有虚函数, - 所以它不是虚函数 - 因此,“如果一个虚函数被标记为…”这段文字不适用 - 因此,示例与文本不匹配。
但是通过意识到这一点,我发现“override”上下文关键字的意图无法实现:如果在函数名称中有拼写错误或参数类型错误使得函数本身不是虚函数,则标准文本永远不适用--并且“override”变得无用。
最好的解决方案可能是将虚拟放在示例函数的前面。