【发布时间】:2015-03-17 03:12:09
【问题描述】:
我正在尝试理解重载解析方法。
为什么会这样模棱两可:
void func(double, int, int, double) {}
void func(int, double, double, double) {}
void main()
{
func(1, 2, 3, 4);
}
但这不是?
void func(int, int, int, double) {}
void func(int, double, double, double) {}
void main()
{
func(1, 2, 3, 4);
}
在第一种情况下,有 2 次完全匹配和 2 次转换,对应 1 次完全匹配和 3 次转换,在第二种情况下,有 3 次完全匹配和 1 次转换,对应 1 次完全匹配和 3 次转换。
那么为什么一个是模棱两可的而一个不是呢?这里的逻辑是什么?
【问题讨论】:
-
有趣的边缘案例,但纯粹是学术性的。如果我看到它在生产代码中使用,有人会被解雇。
-
C++ ISO 可能会讲到这个。以后有人可以给我们参考。
-
@Blindy 跟他说话,是的。严肃地说,是的。但是解雇他?
-
@glglgl Blindy 瞎说
-
用 Java 绘制连接:JLS 不会认为 2 次转换和 1 次转换有区别。它只会区分 have-to-convert 和 not-have-to-convert。 stackoverflow.com/questions/22991150/…