【发布时间】:2014-10-23 12:56:33
【问题描述】:
我是 C++ 新手,有一个问题:
比较以下代码:
class Node {
public:
int data;
Node* x;
};
和
class Node {
public:
int data;
Node x;
};
我知道代码的第二部分无法通过编译。但我想知道原因。
是和内存分配有关还是只是语法规定?
如果有人能解决我的问题,我将不胜感激。
【问题讨论】:
-
编译器不必知道 Node 上的任何东西就能管理指向节点的指针。
-
至少部分与内存分配有关,因为
Node实例的大小会因为递归而趋于无穷大。每个 Instance 将包含Node的所有变量以及Node的另一个实例,该实例将包含另一个 Instance,依此类推。最后构造不能被分配,因为它的大小是无限的。 -
但是指针呢?我认为第一种情况可以通过编译并正常工作。
-
@Oh2 可以。 (顺便说一句,如果您了解 Java:它或多或少等同于 Java 版本
class Node { public int data; public Node x; },因为在 Java 中,类类型的变量隐式只是指针。)
标签: c++ declaration