假设您调用了函数 f。我认为重载解决过程是:
1.创建一组候选函数。这组函数包括所有名为 f 的函数,可以从调用 f() 的位置访问这些函数。
2.创建一组可行的功能。这组函数是候选函数的子集,其中每个可行函数的参数数量与您用来调用 f() 的参数数量一致。
3.选择最佳可行函数。最好的可行函数是其参数都具有比所有其他可行函数更好或排名相同的隐式转换序列的函数. 如果多于或少于一个(不完全是一个),则会出现编译错误。下面的例子很好地展示了它:
class cat
{
public:
cat(int);
};
void func(int, int, int, cat)
{
std::cout << 1 << std::endl;
}
void func(int, int, double, double)
{
std::cout << 2 << std::endl;
}
int main()
{
func(1,2,3,4);
}
此代码生成编译错误 (VS) 或警告 (g++)。
以下将正确运行(打印 1):
void func(int, int, int, double)
{
std::cout << 1 << std::endl;
}
void func(int, double, double, double)
{
std::cout << 2 << std::endl;
}
int main()
{
func(1,2,3,4);
}