因为它会占用"无限"存储,因为它在初始化时会以递归方式初始化自身.但是,您可以存储指向同一结构的指针.
这是无效的:
struct a
{
int someVar;
a bad;
};
Run Code Online (Sandbox Code Playgroud)
这是有效的(如果你想要这个结构的链表):
struct a
{
int someVar;
a* good;
};
Run Code Online (Sandbox Code Playgroud)
因为要创建它的实例,您需要创建变量,它本身就是它的一个实例 - 它将调用构造函数.
这将导致对构造函数的无限递归调用.
假设class A有一个名为的实例变量a:
调用构造函数A将导致初始化a,这本身就是一个A.要做到这一点 - A将再次调用构造函数.
请注意,它甚至不会编译,因为编译器无法为其分配内存,它不知道为每个对象分配多少空间.存储实例变量需要多少空间a?[任何有限的空间都不够,因为总会有一个额外的变量,也需要分配]
struct bedroom
{
bed b;
table t;
bedroom r;
};
Run Code Online (Sandbox Code Playgroud)
你现在看到了问题吗?卧室需要存放无限量的床和桌子.