gpt4 book ai didi

c++ - 覆盖和最终的编译器要求

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:34 25 4
gpt4 key购买 nike

我记得在讨论最终导致新的上下文关键字 overridefinal 的通用属性时,有人建议编译器对这些矿石的支持 可能是可选的(我猜它会在标准文本中读作“行为是特定于实现的”)。但我在 FDIS 和之后的更正中找不到任何关于这种可选性的痕迹。

但既然没有找到它不是证据,我不得不问:是否支持如 FDIS 的 2.11p2、9.2 和 10.3 中所述overridefinal 是符合标准的编译器所必需的吗?

例如是否要求符合标准的编译器拒绝

class Foo {
void func() override; // Error: not virtual, 9.2p9
};

还是通过忽略覆盖仍然符合要求?

最佳答案

是的,要求 override 不会被一致的实现忽略。首先,override只能出现在虚成员函数的声明中。

9.2/9:

[...] A virt-specifier-seq shall appear only in the declaration of a virtual member function.

其次,不重写基类的成员函数但标记为override 的虚函数会使程序格式错误。

10.3/7:

If a virtual function is marked with the virt-specifier override and does not override a member function of a base class, the program is ill-formed.

由于两者都是标准的可诊断规则,因此符合标准的编译器忽略违规行为是非法的。 (1.4/1)

同样的推理适用于final,相关要求在 9 [class]/3 和 10.3 [class.virtual]/4 中。

关于c++ - 覆盖和最终的编译器要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7538431/

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