about function overload on c++

来源:百度知道 编辑:UC知道 时间:2024/05/15 01:40:42
//demo for overload function.
#include <iostream.h>

void Handsome(int a,int b);
void Handsome(int a,float b);

void main(void)
{
Handsome(1,0.2f);//此处为什么要加0.2f才可以区分? 难道0.2还不能与int 类型分开吗?
}

void Handsome(int a,int b)
{
cout<<"You are a handsome man!"<<endl;
}

void Handsome(int a,float b)
{
cout<<"You are an unlovely man!"<<endl;
}

浮点数类型默认情况下是double型的, 所以要加上f后缀来表示其为float型.

在你这个代码里如果不加的话那么0.2就被作为double来处理, 而编译器又没有找到Handsome(int, double)的重载, 它就会查找可以把0.2隐式转换成其他类型的Handsome函数, 因为double可以隐式转换成int 或 float, 所以编译器找到了2个符合要求的重载, 但无法确定用哪个, 所以造成ambiguous call.