为什么在C++中override是可选的

Why is override optional in C++?

本文关键字:override C++ 为什么      更新时间:2023-10-16

我理解C++重写的目的,但与其他高级语言相比,它的实现有点混乱,在其他高级语言中,默认情况下需要使用它。

C++11 wiki页面将其描述为"声明符属性的技术标识符",但没有详细说明为什么它不仅仅是该语言的关键字。

与C++03保持向后兼容性是可选的。如果将其设为非可选,则会破坏所有代码*

类似地,将override作为关键字会破坏任何使用名称override的代码。


好的,不是所有代码,而是很多。

从技术上讲,C++11的行为与这里的Java没有太大区别(这是您提到的"其他高级语言"之一的典型示例)。错误的override将是编译错误,就像Java中错误的@Override一样。缺少override不会是编译错误,就像缺少@Override不会是Java中的编译错误一样。

我能看到的唯一真正的区别是,Java工具传统上有更好的支持来检测丢失的@Override,并且传统上鼓励Java用户将相应的警告视为错误,而C++编译器迄今为止在为丢失的override s添加警告选项方面相当缓慢。

但我们正在实现这一目标;Clang现在有-Winconsistent-missing-override,较新的GC有-Wsuggest-override。您所要做的就是启用这些警告并将其视为错误,要么由编译器强制执行,要么只是按照约定执行。

至于为什么它不仅仅是一个关键词:与旧代码的向后兼容性。