为什么函数重载不可以根据返回类型区分?
2017-12-18 08:26
239 查看
因为调用时不能指定类型信息,编译器不知道你要调用哪个函数。
例如
当调用max(1, 2);时无法确定调用的是哪个,单从这一点上来说,仅返回值类型不同的重载是不应该允许的。
再比如对下面这两个方法来说,虽然它们有同样的名字和自变量,但其实是很容易区分的:
若编译器可根据上下文(语境)明确判断出含义,比如在 int x=f()中,那么这样做完全没有问题。然而,
我们也可能调用一个方法,同时忽略返回值;我们通常把这称为“为它的副作用去调用一个方法”,因为我
们关心的不是返回值,而是方法调用的其他效果。所以假如我们象下面这样调用方法:
f();
Java 怎样判断f()的具体调用方式呢?而且别人如何识别并理解代码呢?由于存在这一类的问题,所以不能
根据返回值类型来区分过载的方法。
函数的返回值只是作为函数运行之后的一个“状态”
他是保持方法的调用者与被调用者进行通信的关键。
并不能作为某个方法的“标识
作者:郭无心
链接:https://www.zhihu.com/question/21455159/answer/59874307
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
例如
float max(int a, int b); int max(int a, int b);
当调用max(1, 2);时无法确定调用的是哪个,单从这一点上来说,仅返回值类型不同的重载是不应该允许的。
再比如对下面这两个方法来说,虽然它们有同样的名字和自变量,但其实是很容易区分的:
void f() {} int f() {}
若编译器可根据上下文(语境)明确判断出含义,比如在 int x=f()中,那么这样做完全没有问题。然而,
我们也可能调用一个方法,同时忽略返回值;我们通常把这称为“为它的副作用去调用一个方法”,因为我
们关心的不是返回值,而是方法调用的其他效果。所以假如我们象下面这样调用方法:
f();
Java 怎样判断f()的具体调用方式呢?而且别人如何识别并理解代码呢?由于存在这一类的问题,所以不能
根据返回值类型来区分过载的方法。
函数的返回值只是作为函数运行之后的一个“状态”
他是保持方法的调用者与被调用者进行通信的关键。
并不能作为某个方法的“标识
作者:郭无心
链接:https://www.zhihu.com/question/21455159/answer/59874307
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章推荐
- Java常考面试题8 深刻认识JAVA重载和重写 以及是否可以根据返回类型来区分重载
- 方法重载,为什么不能根据返回类型来区分?
- Java - 为什么不能根据返回类型来区分重载?
- 为什么不能根据返回类型区分重载?
- 为什么函数不能根据返回类型来区分重载?
- 为什么不能根据返回类型区分重载?
- 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
- C++中的函数重载中为什么不考虑返回值类型?
- 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
- 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
- C++中的函数重载中为什么不考虑返回值类型?
- 函数重载:仅根据函数返回值类型不能实现重载
- 重载(overload)和重写(override)的区别?重载的方法能否根据返回类型进行区分?
- C#中,当从数据库中查询到数据,以DataTable类型返回后,如果需要对DataTable中的数据进行筛选,可以选择下面的方式
- setInterval的返回值类型为什么为数值?
- spring mvc 控制器(Controller)中可以返回的类型
- C指针以及为什么不能返回局部指针变量,却可以返回局部变量
- (java)获取某文件夹下面所有的指定类型的文件名称,并根据情况返回可用的名称
- 为什么final类型map和list内容可以修改
- c++赋值构造函数为什么返回引用类型?