c++ - 关于虚函数的代价

标签 c++ virtual

如果我在一个循环中调用虚函数 1000 次,我会遭受 1000 次还是仅一次的 vtable 查找开销?

最佳答案

编译器可能能够优化它——例如,以下(至少在概念上)很容易优化:

Foo * f = new Foo;
for ( int i = 0; i < 1000; i++ ) {
   f->func();
}

然而,其他情况更困难:

vector <Foo *> v;
// populate v with 1000 Foo (not derived) objects
for ( int i = 0; i < v.size(); i++ ) {
   v[i]->func();
}

相同的概念优化是适用的,但编译器更难看到。

底线 - 如果您真的关心它,请在启用所有优化的情况下编译您的代码并检查编译器的汇编程序输出。

关于c++ - 关于虚函数的代价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1292718/

相关文章:

c++ - 修改文件路径以在 Printf 中使用

c++ - 获取函数参数类型作为元组

c++ - 匿名 union 和普通 union

C++ static_cast 和虚方法功能

C++ lnk error 2019 unresolved external symbol virtual errors because of an interface...(?)

c++ - 在 windows linux 子系统上交叉编译并使用 Visual Studio 2017 部署到目标

c++ - std::cin.getline() 与 std::cin

keyboard - Symbian S60 第 5 版中的虚拟键盘 : Which API to use?

c++ - 我可以调用虚函数来初始化基类子对象吗?

c++ - 这个初始化列表是如何使用虚类实现的呢?