2010-01-23 36 views
1

在有效的C++的书刚才提到的一句话,为什么默认参数是静态绑定:静态默认参数的结合

如果默认参数值进行动态绑定,编译器将不得不拿出一个办法来确定适当的用于在运行时虚拟函数,这将是比编译期间确定它们的当前机制慢,更复杂的参数的默认值。

谁能阐述这个多一点?为什么它是复杂和低效的?

非常感谢!

回答

2

每当一类有虚函数,编译器生成的所谓的V-表来计算所需要在运行时,以支持动态绑定和多态行为的正确地址。许多类优化器正是因为这个原因去除虚拟函数。更少的开销和更小的代码。如果默认参数也被计算入方程,它将使整个虚拟函数机制更加繁琐和臃肿。

0

因为函数调用实际调用需要使用与对象实例,并从该deault需要以某种方式来推断相关的虚函数表中查找。这意味着ctable将需要延长要么就需要格外管理到默认链接到的V表项。