C+中函数重载的模糊性+;Vs Java 在C++中函数重载的情况下,我们知道在实际和形式参数不匹配的条件下可能会出现歧义。所以有一个解决这个问题的机制 For every actual parameter P, Si be the set of corresponding formal parameters that matches best. then S will be the intersection of all Si.

C+中函数重载的模糊性+;Vs Java 在C++中函数重载的情况下,我们知道在实际和形式参数不匹配的条件下可能会出现歧义。所以有一个解决这个问题的机制 For every actual parameter P, Si be the set of corresponding formal parameters that matches best. then S will be the intersection of all Si.,java,c++,overloading,Java,C++,Overloading,对于这一点,有4种类型的规则 精确匹配 晋升 标准转换 用户定义转换 省略号(并非所有人都考虑) Java也会出现类似的过程吗?因为Java的函数重载规则是相同的,这些类型的歧义也会发生在这里。类似的过程吗?嗯,这取决于“相似”是什么意思 然而,Java语言规范中对其进行了详细的描述, 第章 特别是第二章 确定适用性的过程始于确定潜在适用的方法() 该过程的其余部分分为三个阶段,以确保与JavaSE5.0之前的Java编程语言版本兼容。这些阶段是: 第一阶段()执行重载解析,不允许装箱或取消装箱

对于这一点,有4种类型的规则

  • 精确匹配
  • 晋升
  • 标准转换
  • 用户定义转换
  • 省略号(并非所有人都考虑)

  • Java也会出现类似的过程吗?因为Java的函数重载规则是相同的,这些类型的歧义也会发生在这里。

    类似的过程吗?嗯,这取决于“相似”是什么意思

    然而,Java语言规范中对其进行了详细的描述,
    第章
    特别是第二章

    确定适用性的过程始于确定潜在适用的方法()

    该过程的其余部分分为三个阶段,以确保与JavaSE5.0之前的Java编程语言版本兼容。这些阶段是:

  • 第一阶段()执行重载解析,不允许装箱或取消装箱转换,也不允许使用变量arity方法调用。如果在此阶段没有找到适用的方法,则处理继续到第二阶段

  • 第二阶段()执行重载解析,同时允许装箱和取消装箱,但仍然禁止使用变量arity方法调用。如果在此阶段没有找到适用的方法,则处理继续到第三阶段

  • 第三阶段()允许重载与变量arity方法、装箱和取消装箱相结合

  • 在泛型方法()的情况下,决定方法是否适用需要对类型参数进行分析。类型参数可以显式或隐式传递。如果隐式传递,则必须从参数表达式中推断()类型参数的边界

    如果在适用性测试的三个阶段中的一个阶段确定了几种适用的方法,则按照第节的规定选择最具体的方法

    第二章总结得很好:

    Java编程语言使用的规则是选择最具体的方法

    非正式的直觉是,如果第一个方法处理的任何调用都可以传递给另一个方法而不会出现编译时错误,那么一个方法比另一个方法更为具体


    当然,这个过程要复杂一点。

    类似的过程?嗯,这取决于“相似”是什么意思

    然而,Java语言规范中对其进行了详细的描述,
    第章
    特别是第二章

    确定适用性的过程始于确定潜在适用的方法()

    该过程的其余部分分为三个阶段,以确保与JavaSE5.0之前的Java编程语言版本兼容。这些阶段是:

  • 第一阶段()执行重载解析,不允许装箱或取消装箱转换,也不允许使用变量arity方法调用。如果在此阶段没有找到适用的方法,则处理继续到第二阶段

  • 第二阶段()执行重载解析,同时允许装箱和取消装箱,但仍然禁止使用变量arity方法调用。如果在此阶段没有找到适用的方法,则处理继续到第三阶段

  • 第三阶段()允许重载与变量arity方法、装箱和取消装箱相结合

  • 在泛型方法()的情况下,决定方法是否适用需要对类型参数进行分析。类型参数可以显式或隐式传递。如果隐式传递,则必须从参数表达式中推断()类型参数的边界

    如果在适用性测试的三个阶段中的一个阶段确定了几种适用的方法,则按照第节的规定选择最具体的方法

    第二章总结得很好:

    Java编程语言使用的规则是选择最具体的方法

    非正式的直觉是,如果第一个方法处理的任何调用都可以传递给另一个方法而不会出现编译时错误,那么一个方法比另一个方法更为具体

    当然,它比这要复杂一点。

    请参阅,其中包括以下内容,当调用方法时(§15.12),在编译时使用实际参数的数量(以及任何显式类型参数)和参数的编译时类型来确定将调用的方法的签名(§15.12.2)。如果要调用的方法是实例方法,则将在运行时使用动态方法查找(§15.12.4)确定要调用的实际方法。请参阅,其中包括以下内容,当调用方法(§15.12)时,实际参数的数量(以及任何显式类型参数)参数的编译时类型在编译时用于确定将被调用的方法的签名(§15.12.2)。如果要调用的方法是实例方法,则将在运行时使用动态方法查找(§15.12.4)确定要调用的实际方法。