相关疑难解决方法(0)

如何在重载决策算法中确定歧义?

我正在尝试理解重载解析方法.

为什么这个含糊不清:

void func(double, int, int, double) {}
void func(int, double, double, double) {}

void main()
{
    func(1, 2, 3, 4);
}
Run Code Online (Sandbox Code Playgroud)

但这不是?

void func(int, int, int, double) {}
void func(int, double, double, double) {}

void main()
{
    func(1, 2, 3, 4);
}
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,有2个精确参数匹配,2个转换针对1个完全匹配和3个转换,在第二种情况下,有3个完全匹配,1个转换针对1个完全匹配和3个转换.

那么为什么一个模棱两可而一个不是?这里的逻辑是什么?

c++ overload-resolution

61
推荐指数
2
解决办法
1895
查看次数

为什么带签名(primitive,wrapper)和(primitive,primitive)的两个方法会导致方法调用(包装器,原语)不明确?

这只是一个练习,但我无法弄清楚这种模糊性:

private static void flipFlop(String str, int i, Integer iRef) {
System.out.println(str + "ciao");
}

private static void flipFlop(String str, int i, int j) {
System.out.println(str + "hello");
}

public static void main(String[] args) {
flipFlop("hello", new Integer(4), 2004);
}
Run Code Online (Sandbox Code Playgroud)

它说:

对于类型Test,方法flipFlop(String,int,Integer)是不明确的

我猜想第二个参数将被解包为int,所以第二个flipFlop方法就是选择.

java jdk1.6

17
推荐指数
2
解决办法
1060
查看次数

标签 统计

c++ ×1

java ×1

jdk1.6 ×1

overload-resolution ×1