gpt4 book ai didi

c++ - 在 C++11 中同时使用 virtual 和 override 关键字有什么微妙之处吗?

转载 作者:IT老高 更新时间:2023-10-28 21:46:16 27 4
gpt4 key购买 nike

在 C++ 中的函数上同时使用 virtualoverride 是否危险?这会让你对重载产生歧义吗?

显然 virtual 必须在基类中使用,而在派生类中不使用 override 会很愚蠢,但是使用 真的有问题吗virtual with override 在派生类中?

试图确定这是样式问题还是正确性问题。

例子:

class Widget {
virtual void transmogrify() = 0;
}

class Gadget : public Widget {
virtual void transmogrify() override {}
}

最佳答案

virtual 关键字在覆盖时无效。与基类中定义的虚函数签名匹配的派生函数将覆盖基定义,并且无论在派生类中是否使用 virtual 关键字,都将在 vtable 中输入覆盖与否。

因为 override 关键字如果不发生覆盖会导致编译错误,所以 virtual 关键字组合起来是没有用的。

这里,有一个备忘单:

| Keyword used | Matching virtual function in base class | Result                   |
|--------------|-----------------------------------------|--------------------------|
| Neither | No | New non-virtual function |
| Neither | Yes | Override |
| virtual | No | New virtual function |
| virtual | Yes | Override |
| override | No | Compile error |
| override | Yes | Override |
| Both | No | Compile error |
| Both | Yes | Override |

关于c++ - 在 C++11 中同时使用 virtual 和 override 关键字有什么微妙之处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29760375/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com