关于函数重载

Keanu_Rocky 2002-06-16 09:22:32
#include <iostream.h>

void output ( float f)
{
cout << "output float" << f << endl;
}

void output ( int i)
{
cout << "output int" << i << endl;
}

void main(void)
{
output(0.5);
}
编译程序应能识别0.5为浮点型吧?为什么在这里还是会引发二义性?
...全文
31 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
masterdog 2002-06-16
  • 打赏
  • 举报
回复
匹配规则:(按照以下三条逐次匹配)
1. 完全匹配
2. 内部类型转换
3. 用户类型转换

对于int形参,5是严格匹配,所以会选择int。
对于你这个例子,要避免二义性,在函数调用时候指明转换类型:

output(float(0.5));
llin_9461 2002-06-16
  • 打赏
  • 举报
回复
你最好是加上强制转换否则会出错,我上次也是出了同样的错,就是像你一样,加上后便可正确重载
ttzzgg_80713 2002-06-16
  • 打赏
  • 举报
回复
编译器可以作隐式的转换。加个(float)就可以了
Keanu_Rocky 2002-06-16
  • 打赏
  • 举报
回复
to xuying():
编译器是否把所有类似如 0.5 的常量当作 double 处理?确定吗?
那么编译器把 5 当作 int 还是 long int 来处理呢?
xuying 2002-06-16
  • 打赏
  • 举报
回复
编译器将0.5默认为double型,所以认为有2个可以转换的类型float和int,
因此出错。
改成:
output((float)0.5);

就可以了。
晨星 2002-06-16
  • 打赏
  • 举报
回复
int和float之间可以自动转换,所以两个函数都符合要求。

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧