【问题标题】:static binding of default parameter默认参数的静态绑定
【发布时间】:2010-01-23 21:59:36
【问题描述】:

在Effective C++中,这本书刚刚提到了一句为什么默认参数是静态绑定的:

如果默认参数值是动态绑定的,编译器将不得不想出一种方法来在运行时确定虚函数参数的适当默认值,这将比在编译期间确定它们的当前机制更慢且更复杂.

谁能详细说明一下?为什么复杂而低效?

非常感谢!

【问题讨论】:

    标签: c++


    【解决方案1】:

    只要一个类具有虚函数,编译器就会生成一个所谓的 v-table 来计算运行时支持动态绑定和多态行为所需的正确地址。正是出于这个原因,许多类优化器致力于删除虚函数。更少的开销和更小的代码。如果在方程中也计算出默认参数,那会使整个虚函数机制更加繁琐和臃肿。

    【讨论】:

      【解决方案2】:

      因为对于函数调用,需要使用与对象实例关联的 vtable 来查找实际调用,并且需要以某种方式推断出默认值。这意味着 ctable 需要扩展,或者需要额外的管理才能将默认值链接到 vtable 条目。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-18
        • 1970-01-01
        • 2011-05-31
        • 2011-03-05
        • 2015-01-27
        • 2019-05-20
        相关资源
        最近更新 更多