结论:虚函数寻址几乎不消耗时间。
代码:
#include <iostream>
#include <functional>
#include <thread>
#include <array>
#include <assert.h>
using namespace std;
class B
{
public:
virtual void show() {}
virtual void add() {}
};
class C : public B
{
public:
C(void)
{
i = 0;
}
virtual void add() {
++i;
}
virtual void show() {
std::cout << i << endl;
}
int i;
};
int main(void)
{
int num = 100000000;
int begin = 0;
begin = clock();
B* b = new C();
for (int i = 0; i < num; ++i)
{
b->add();
b->add();
}
std::cout << "多态耗时" << clock() - begin << endl;
begin = clock();
C* c = new C();
for (int i = 0; i < num; ++i)
{
c->add();
c->add();
}
std::cout << "正常耗时" << clock() - begin << endl;
b->show();
c->show();
return 0;
}
输出结果:
多态耗时3751
正常耗时3749
200000000
200000000