gpt4 book ai didi

java函数匹配规则不同于C++

转载 作者:行者123 更新时间:2023-11-28 02:26:23 26 4
gpt4 key购买 nike

package java;

public class Question {

interface A {}

class B0 implements A {}

static void f(B0 b) {}

public static void main(String[] args) {

A a = new B0();
B0 b = new B0();

Question.f(a); // compiler error
Question.f(b);

}

}

这是编译器错误:

描述资源路径位置类型Question 类型中的方法 f(Question.B0) 不适用于参数 (Question.A) Question.java/java/src/java line 18 Java Problem

在 C++ 中这是可行的,a 的运行时类型是 B0,所以 Question.f 是一个匹配项。

为什么 Java 会报错?

最佳答案

因为 B0 是 A 的特化,所以 A 的功能可能比 B0 少。

f 需要 B0。 f 可以合理地期望访问 A 中不存在的方法或成员。如果这在 C++ 中编译,则编译器已损坏。

C++中的等价物是

class A
{

};

class B0: public A
{

};

static void f(B0 * b)
{

}

int main() {

A * a = new B0();
B0 * b = new B0();

f(a); // compiler error
f(b);

delete a;
delete b;
}

这在多种 GCC 4 或 MSVS 10 中不起作用。

关于java函数匹配规则不同于C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30495869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com