静态联编译和动态联编译

Posted 顾文繁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态联编译和动态联编译相关的知识,希望对你有一定的参考价值。

联编

将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编(binding)

C语言中,每个函数名都对应一个不同的函数,在C++中由于函数重载的缘故,这项任务更复杂。编译器必须查看函数参数以及函数名才能确定使用那个函数。然而C/C++编译器可以在编译过程完成这种联编。在编译过程中进行联编被称为静态联编(static binding) 。然而虚函数使得这项工作变得更困难。编译器必须生成能够在程序运行时选择正确的虚方法的代码,这被称为动态联编(dynamic binding)。

#include <iostream>
using namespace std;
class Base{
public:
    virtual void view(){
        cout << "base" << endl;
    }

};

class BaseChild : public Base{
public:
    virtual void view(){
        cout << "child" << endl;
    }
};

int main(){
    cout.setf(std::ios_base::fixed, std::ios_base::floatfield);
    cout.precision(4);

    BaseChild child;
    Base* base = &child;
    base->view();
    Base base1 = child;
    base1.view();
    Base& base2 = child;
    base2.view();

    return 0;
}

 

以上是关于静态联编译和动态联编译的主要内容,如果未能解决你的问题,请参考以下文章

CPP-NOTE动态联编

49动态联编和静态联编

c++知识点总结--静态与动态联编

C++虚函数表与虚析构函数

虚函数相关问题分析

登录认证