c++ 重写为默认说明符...为什么不呢?

im9ewurl  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(129)

自从使用c++11以来,我一直注意到在从接口派生的类中,我总是使用override说明符(对我来说,人们最想知道的是基类中的虚拟签名何时发生变化)。我几乎觉得连续指定override是错误的,这就引出了我的问题:
为什么标准委员会没有决定将override设为默认值(在虚拟机的基本签名改变时生成编译器错误),同时添加一个关键字来显式地“不关心”,例如override_ignore(我不认为有人会想忽略这个)?

yiytaume

yiytaume1#

正如Nathan奥利弗所述:向后兼容性(一个必要的缺点)尽管在代码库中大量替换术语“override”相当容易,但它只会成为本已不情愿的编程社区的另一个障碍。
另一个要点是代码可读性,如果你正在维护一个非常大的代码库的一小部分,在你的子类中有一个override说明符来提醒你:

  • 在没有重构父类和所有兄弟类的情况下不应该重构方法,
  • 该方法用于满足特定要求,并且
  • 关于方法的必要工作的任何信息可以在父类的头中找到。

C++并不专注于使代码本身尽可能的小和高效--这就是为什么它很少赢得任何代码高尔夫挑战。相反,它是一种专注于严谨性和明确你所做的一切的语言。至少,这是我对这种语言的看法。以及为什么当我需要在复杂程序中保持清晰时,它是我的首选语言(尽管一些常见的操作比许多其他语言需要更多的时间来写出)。

pbpqsu0x

pbpqsu0x2#

还考虑以下情况:

struct A {
    virtual void foo();
}

struct B: public A {
    virtual void fog() override; 
}

您输入了错误的函数 namefog而不是foo),这段代码将给您带来编译错误。但是,使用默认重写方法,编译器将永远不会知道有错误。

相关问题