gpt4 book ai didi

c++11 - C++11 中的最终非多态类

转载 作者:行者123 更新时间:2023-12-01 23:23:09 25 4
gpt4 key购买 nike

我只是为了确保没有人会派生 self 的非多态类,所以我使用了以下语法:

class Foo final
{
Foo();
~Foo(); // not virtual

void bar();
};

The C++ programming language 中,我读到 final 可以与 override 一起用于包含虚拟成员函数的类。我在 VS 2013 中尝试了我的代码示例,它在没有任何警告的情况下编译。

是否允许对非多态类使用关键字 final 以防止从该类派生?关键字 override 对非多态类有意义吗?

最佳答案

C++ 语法允许 final 出现在两个不同的地方。一个是 class-virt-specifier,它可以出现在类声明中的类名之后,您就是这样使用它的。尽管名称如此,但使用 class-virt-specifer 与虚函数无关,并且在非多态类中是允许的。

另一个可以使用它的地方是成员函数上的 virt-specifier。如果存在,virt-specifer 序列由 finaloverride 中的一个或两个组成,但只允许在虚函数上使用(9.2 [class .mem] "virt-specifier-seq 最多应包含每个 virt-specifier 中的一个。virt-specifier-seq 应出现仅在虚拟成员函数 (10.3)."的声明中。")。所以override只能用在虚函数上,不能用在非多态类型上。

关于c++11 - C++11 中的最终非多态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27902849/

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