gpt4 book ai didi

c++ - final 用于 C++ 中的优化吗?

转载 作者:IT老高 更新时间:2023-10-28 12:33:38 29 4
gpt4 key购买 nike

class A {
public:
virtual void f() = 0;
};

class B : public A {
public:
void f() final override { };
};

int main() {
B* b = new B();
b->f();
}

在这种情况下,编译器是否仍需要为 b->f(); 进行 v-table 查找,还是可以调用 B::f() 直接因为它被标记为 final?

最佳答案

Is final used for optimization in C++?

它可以,并且是。

如前所述,它已经在使用; see herehere显示生成的覆盖代码,有和没有 final

An optimisation along these lines将与虚拟调用的“去虚拟化”有关。这并不总是立即受到类或方法的 final 的影响。尽管它们提供了帮助来确定这一点,但虚函数和类层次结构的正常规则仍然适用。

如果编译器可以确定在运行时将始终调用特定方法(例如,给定 OP 示例,使用自动对象),它可以应用这样的 an optimisation anyway ,不管方法是否是final

优化属于 as-if rule ,它允许编译器应用任何转换,只要可观察到的行为就像原始代码已被执行。

关于c++ - final 用于 C++ 中的优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37414995/

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