自从使用c++11以来,我一直注意到,在从接口派生的类中,我总是使用覆盖说明符(对我来说,人们主要想知道基中的虚拟签名何时发生变化)。我几乎觉得连续指定重写是错误的,这就引出了我的问题:
为什么标准委员会不决定覆盖默认值(为虚拟人生成基本签名更改上的编译器错误),同时添加一个关键字来显式地“不关心”,例如override_ignore (我不认为有人会忽略这一点)?
发布于 2015-11-11 13:07:34
正如Nathan所提到的:向后兼容性(一个必要的缺点)。尽管在代码库中对“重写”一词进行大量替换是相当容易的,但它只是对一个本已不情愿的编程社区的另一个障碍。
另一个要点是代码的可读性。如果您正在维护一个非常大的代码基中的一小部分,最好在您的子类中有一个覆盖说明符来提醒您:
C++没有专注于使代码本身尽可能的小和高效-这就是为什么它很少赢得任何代码-高尔夫挑战。相反,它是一种语言,它专注于严谨,在你所做的每件事上都是明确的。至少,这是我对语言的看法,以及为什么(虽然一些常见的操作比其他许多语言需要更多的时间)在复杂的程序中需要清晰的时候,它是我的首选语言。
发布于 2015-11-11 13:26:38
还考虑以下情况:
struct A {
virtual void foo();
}
struct B: public A {
vitual void fog() override;
}您输入了函数名,这段代码将给您带来编译错误。但是,使用默认覆盖方法,编译器将永远不会知道存在错误.
https://stackoverflow.com/questions/33650909
复制相似问题