【发布时间】:2010-03-09 01:29:46
【问题描述】:
我一直听到这种说法。 Switch..Case 对于代码维护来说是邪恶的,但它提供了更好的性能(因为编译器可以内联东西等)。虚函数非常适合代码维护,但它们会导致两个指针间接的性能损失。
假设我有一个基类,它有 2 个子类(X 和 Y)和一个虚函数,所以会有两个虚表。该对象有一个指针,它将根据该指针选择一个虚拟表。所以对于编译器来说,更像是
switch( object's function ptr )
{
case 0x....:
X->call();
break;
case 0x....:
Y->call();
};
那么为什么虚函数的成本会更高,如果它可以通过这种方式实现,因为编译器可以在这里做同样的内联和其他事情。或者解释一下,为什么决定不这样实现虚函数执行?
谢谢, 悟空。
【问题讨论】: