函数重载解析如何在C ++中发生?

时间:2011-08-08 16:45:59

标签: c++ function overloading

我是C ++的初学者。我想知道,函数重载在C ++内部是如何发生的。

2 个答案:

答案 0 :(得分:5)

我建议你阅读C++ Primer。深入解释了这个概念。

在更高级别,如果两个函数都

,则允许函数重载
  • 具有相同名称
  • 在同一范围内声明
  • 有不同的参数列表。

在较低级别(编译器如何计算出来),这是如何完成的。

功能重载分辨率有3个步骤。

e.g void f();   
    void f(int);
    void f(double, double = 3.4);
    void f(char *, char *);

    Function call inside main -> void f(5.6);
  1. 标识为调用考虑的重载函数集,它们被称为候选函数。候选函数是与被称为&的函数同名的函数。在通话点可以看到哪个声明。 它还标识函数调用中参数列表的属性,即参数及其类型。

    已选择:所有4个名称为“f”的函数

  2. 从步骤1中找到的候选函数集中选择可以使用调用中指定的参数调用的函数。这些被称为可行的功能。 可行函数是具有与实际函数调用中的参数相同的nof参数或更多参数(addn参数具有关联的默认参数)的函数。参数类型必须是可转换的,才能将函数归类为可行。

    已选择:void f(int)和void(double,double = 3.4)

  3. 确定所有可行功能中最佳的可行功能。 对于(int)转换需要应用哪个是标准转换(double to int)。但是对于(double,double = 3.4),存在完全匹配,因此不需要转换。没有转化比转化更好。

    选中:void(double,double = 3.4)

答案 1 :(得分:3)

它在内部发生了错误的名称。

对于文件

void blah(int f)
{
}

void blah(double f)
{}

我得到符号

ethan@EthanPc ~ % nm blah.o   
0000000000000009 T _Z4blahd
0000000000000000 T _Z4blahi

注意d为double,i为整数。