我是C ++的初学者。我想知道,函数重载在C ++内部是如何发生的。
答案 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);
标识为调用考虑的重载函数集,它们被称为候选函数。候选函数是与被称为&的函数同名的函数。在通话点可以看到哪个声明。 它还标识函数调用中参数列表的属性,即参数及其类型。
已选择:所有4个名称为“f”的函数
从步骤1中找到的候选函数集中选择可以使用调用中指定的参数调用的函数。这些被称为可行的功能。 可行函数是具有与实际函数调用中的参数相同的nof参数或更多参数(addn参数具有关联的默认参数)的函数。参数类型必须是可转换的,才能将函数归类为可行。
已选择:void f(int)和void(double,double = 3.4)
确定所有可行功能中最佳的可行功能。 对于(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为整数。