函数重载为什么不根据返回值进行判断,而是根据函数入参进行判断?

wunderup 2007-06-30 03:04:02
假如函数名一样,函数参数一样,返回值不同的话,那应该就是重复定义了吧?

假如函数名一样,函数参数不一样,返回值不管是否一样,都应该按照重载来处理了?

谢谢
...全文
534 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liwenchao 2008-10-20
  • 打赏
  • 举报
回复
若函数名和函数参数都一样的话,编译器提示重复定义,因为JVM无法判断程序中需要调用那一个函数。

若函数名一样,函数参数不一样,则在该类内已实现了重载,无论返回值是否一样都是类内多态性的一种表现。
fflush 2007-06-30
  • 打赏
  • 举报
回复
//declaration
int func();
void func();

//code
func (); //which one??

所以,根据返回值无法做出合理的重载解析
Inhibitory 2007-06-30
  • 打赏
  • 举报
回复
这个与编译器为重载函数的命名有关,编译器为重载函数命名方式如下: 函数名 + 参数1的类型 + 参数2的类型 + ..., 但其中并没有用到函数的返回类型,所以不能只用函数的返回类型来识别函数重载.

一个直观的为什么不以返回类型来识别函数重载的例子:
int func() {return 100;}
double func(){return 300.444;} // 假如重载函数func成功.

int data = (int)func(); // 返回值强制类型转换为int型
判断一下,这时到底该用哪一个函数呢?是用int func()还是double func()?这里不能判断,但也不能随便使用一个吧,也不能以前面的(int)来判断吧,要是能,那么用double func()的时候那还不写成int data = (int)(double)func(),这多么恐怖,虽然可以让编译器这样实现,但显然弊大于利,所以直接就不用返回值来作为函数的重载判定因素了.
  • 打赏
  • 举报
回复
路过!
lockhall 2007-06-30
  • 打赏
  • 举报
回复
因为函数调用是可以忽略返回值的

而如果用返回值来重载,太过于微妙,因为C++禁止了利用返回值来重载

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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