在Effective C ++中,本书刚刚提到了一个句子,为什么默认参数是静态绑定的:
如果默认参数值是动态绑定的,编译器必须想出一种方法来确定运行时虚函数参数的相应默认值,这比编译期间确定它们的当前机制要慢一些。 。
任何人都可以详细说明这一点吗?为什么它复杂而低效?
非常感谢!
答案 0 :(得分:2)
每当类具有虚函数时,编译器都会生成一个所谓的v表来计算运行时所需的正确地址,以支持动态绑定和多态行为。由于这个原因,许多类优化器都在努力去除虚函数。减少开销,减少代码。如果默认参数也被计算到等式中,它将使整个虚函数机制变得更加繁琐和臃肿。
答案 1 :(得分:0)
因为对于函数调用,需要使用与对象实例关联的vtable来查找实际调用,并且需要以某种方式推断deault。这意味着ctable需要扩展,或者需要额外的管理来将默认值链接到vtable条目。