我理解C++ override的目的,但是与其他更高级别的语言相比,它的实现有点困惑,默认情况下需要使用它。
C++11 wiki page将其描述为“声明属性的技术标识符”,但没有详细说明为什么它不仅仅是该语言的关键字。
答案 0 :(得分:9)
保持与C ++ 03的向后兼容性是可选的。使其成为非可选项会破坏所有代码 * 。
同样,将override
设为关键字会破坏使用名称override
的任何代码。
好的,不是字面上所有代码,而是很多代码。
答案 1 :(得分:3)
从技术上讲,C ++ 11在这方面与Java没有太大的不同(这是您提到的“其他更高级语言”之一的典型示例)。 错误 override
将是编译错误,就像Java中的错误@Override
一样。 缺少 override
将不会出现编译错误,就像丢失的@Override
不会是Java中的编译错误一样。
我能看到的唯一真正的区别是Java工具传统上有更好的支持来检测丢失的@Override
,并且传统上鼓励Java用户将相应的警告视为错误,而C ++编译器一直是到目前为止,为缺少override
s添加警告选项非常慢。
但我们到了那里; Clang现在有-Winconsistent-missing-override
,而较新的GCC有-Wsuggest-override
。您所要做的就是启用这些警告,并将它们视为错误,可以由编译器强制执行,也可以按惯例处理。
至于为什么它不仅仅是一个关键字:向后兼容旧代码。