函数重载是如何在C++中发生的?

jos*_*ose 2 c++ overloading function

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

sgo*_*les 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);
Run Code Online (Sandbox Code Playgroud)
  1. 标识为调用考虑的重载函数集,它们被称为候选函数.候选函数是一个与被调用函数同名的函数,其声明在调用时可见.它还标识函数调用中参数列表的属性,即没有参数及其类型.

    选中:名称为'f'的所有4个函数

  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)

  • 最后一点(具有相同的返回类型)不是必需的 - 重载函数可能具有不同的返回类型.返回类型本身对重载决策没有影响; 只有参数类型很重要. (2认同)