我一直想知道这个决定的原因,为什么override
和final
必须在成员函数声明符之后:
struct Base {
virtual void virtFun();
};
struct Foo: Base {
virtual void virtFun() override;
};
对我来说,更合理的做法是在override
/final
的位置放置virtual
:
struct Base {
virtual void virtFun();
};
struct Foo: Base {
override void virtFun();
};
这是有原因的吗?也许与 C++11 之前的兼容性有关?
virtual void virtFun() override
。 - Justinoverride和final最终被用于语法中用户标识符无法出现的地方。因此,在这些地方,标识符可以具有特殊含义,并且在上下文之外,它们可以被视为常规标识符,从而使标识符可供用户使用。
- Shafik Yaghmour@Override
。那个@符号很丑陋,但确实允许它出现在声明的开头。 - Hans Passantoverride
或final
用作类型名称。这些本来就不太可能是类型名称。正因为如此,我们把这些限定词放错了位置。使用override
/final
作为类型名称的好处远远低于允许将其放在正确的位置上的好处。我们很少(几乎从不)将override
/final
用作类型名称,而是经常将它们用于指定重写/最终方法。 - geza