[英]override on non-virtual functions
它说的是C ++ 11 FDIS
如果使用virt-specifier覆盖标记了虚函数并且不覆盖基类的成员函数,则程序格式错误。 [示例:
struct B { virtual void f(int); }; struct D : B { void f(long) override; // error: wrong signature overriding B::f void f(int) override; // OK };
如果B::f
不会被标记为虚拟怎么办? 程序格式错误吗? 还是被override
然后被忽略`。 我在标准文本中找不到这种情况的任何处理。
更新1/2 (合并)我将请求转发给C ++编辑器以调查问题。 感谢约翰内斯向我指出这一点。
但是通过意识到这一点,我发现无法满足“ override”上下文关键字的意图:如果函数名称中的错字或错误的参数类型确实使函数本身不是虚拟的,那么该标准的文本将永远不适用- -而“替代”则变得无用。
最好的解决方案可能是
如果
B::f
不会被标记为虚拟怎么办? 程序格式错误吗?
是的。 因为为了覆盖某些内容,所以某些内容必须是虚拟的。 否则,它不会被覆盖 ,而是会被隐藏 。 因此,肯定的答案来自您问题的引文。
如果B:f
是非虚拟的,则两个 D:f
函数都将格式错误。
是的,将override
添加到任何非虚拟函数时,程序格式不正确。
通常,具有不同签名(重载)的功能与具有不同名称的功能一样。 在规格中给出的例子并不意味着暗示函数名影响override
。 它旨在显示override
旨在防止的常见错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.