如果我在一个循环中调用虚函数 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/