java - 链表实现的先有鸡还是先有蛋的困境

标签 java c++ standards

我主要学习了C++上下文中的链表。这是一个节点实现

struct node
{
  int data;
  node* next;//node IS what is being defined
};

我被告知 C++ 标准对此做了一个特殊的异常(exception),因为存在一个自引用,其中定义的结构有一个本身的成员,这是一个问题,因为它没有完全定义。为什么这可能?这让我在面试问题上搞砸了,我需要知道其他语言是否支持这一点。例如,我见过一个 Java 实现

class Link {
public int data1;
public double data2;
public Link nextLink;

//Link constructor
public Link(int d1, double d2) {
    data1 = d1;
    data2 = d2;
}

//Print Link data
public void printLink() {
    System.out.print("{" + data1 + ", " + data2 + "} ");
}

}

因此,这似乎支持 Java 做出某种“特殊异常(exception)”,以及在 Link 的实现中发生 public Link nextLink; 的情况。一般来说,大多数编程语言都具有此功能吗?什么时候可以使用?

所以你总是可以:

struct X{
 X* y;
};

和 公共(public)X级 { 公共(public) X y; }

最佳答案

为什么这不可能? Link 类型的字段只是一个引用,这也不异常(exception)。

在您的情况下,引用是与所定义的对象类型相同的对象,但是内存中没有递归,因为引用只是一个指针。因此,不存在技术问题。

您也可以说,在类声明中,类未完全定义,但您使用了引用对象的方法和字段。但这与在类声明中使用 this 的方法和字段,甚至在自己的声明之前使用方法是完全相同的。 编译器一直在处理它,不用担心。

旁注:顺便说一下,先有鸡蛋,先有鸡,来自一只不完全是鸡的鸟。

关于java - 链表实现的先有鸡还是先有蛋的困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23006796/

相关文章:

java - 没有可用类型的合格 bean(Spring Data)

c++ - 如果模板化的 "ResourceCache"需要不同的创建参数/方法,如何加载/创建 T 类型的资源?

gcc - gcc 在 c99 模式下是否错误地执行隐式函数声明?

激活 MouseListener 的 obj 的 Java getName

java - Android:当没有互联网连接时,如何将应用程序添加到 “Share via” 列表以获取相机图片

java - 如何将环境变量作为命令的一部分传递

c++ - Variadic template 选择更通用的模板而不是重载

c++ - 将一个函数向上转换为另一个基类参数

.net - 如何在解析 JSON 文件之前在 Powershell 中验证 JSON 语法

c - 位移位和整数提升?