C ++中名称处理的目的是什么?

时间:2018-11-03 17:42:45

标签: c++ naming overloading

我读过一篇文章,指出编译器更改了具有相同名称的函数的名称(名称修饰),以避免名称冲突。

请考虑以下示例。

void fun(int x)
{
    cout<<x<<endl;  
}

void fun(float x)
{
    cout<<x<<endl;
}

int main()
{
    fun(10);
    fun(10.5f);

    return 0;
}

上面是一个非常简单的函数重载示例。这里,在编译代码时,编译器将更改函数名称,以便链接程序可以在两个不同的调用之间链接。

问题:需要进行什么处理?

由于参数具有不同的数据类型,因此足以与适当的函数链接。为什么编译器为什么要执行名称处理?

1 个答案:

答案 0 :(得分:6)

链接器不知道重载(对于多种语言,它必须是通用的)。它只知道需要解决的符号

编译器的名称修改为两个函数重载创建了两个不同的符号,从而使链接程序可以将它们解析为正确的函数。