我读了关于C++中的结构,它不能包含它自己的实例。 任何人都可以帮助我理解它为什么不能包含它自己的实例吗?为什么结构不能包含它自己的实例?
回答
因为要创建它的实例,您需要创建变量,它本身就是它的一个实例 - 它将调用构造函数。
这将导致对构造函数的无限递归调用。
假设class A
有一个名为a
的实例变量:
调用的A
构造会造成a
初始化,它本身就是一个A
。要做到这一点 - A
的构造函数将被再次调用。
请注意,它甚至不会编译,因为编译器无法为它分配内存,它不知道为每个对象分配多少空间。需要多少空间才能存储实例变量a
? [任何有限的空间将是不够的,因为总会有一个额外的变量,也需要分配]
因为那么它会占用“无限”的存储,因为它初始化时递归地初始化自己。但是,您可以将指针存储到相同的结构中。
例如这是无效的:
struct a
{
int someVar;
a bad;
};
这是有效的(比方说,如果你想要这个结构的链接列表):
struct a
{
int someVar;
a* good;
};
因为那将导致inifite递归。例如
struct foo
{
int boo;
foo f;
};
foo f;
foo
将包含foo
含有foo
等等
要解决它,你应该使用指针:
struct foo
{
int boo;
foo* f;
};
不只是结构的任何不完整的数据类型不能为与它一起使用。 可以说你有一个结构体A,并且你已经包含了与成员体相同的结构体,现在当编译器试图向它分配内存时,它如何知道要分配多少内存,因为你已经声明了结构体A,它尚未完全定义它会抛出错误不完整的数据类型不允许。
正如其他答案指出的那样,该结构不能包含自身的实例,因为这会在创建结构时导致无限递归。然而一个结构可以包含一个指针本身:
struct foo
{
int boo;
foo *f;
};
foo f;
f.f = &f;
因为不可能创造这样的结构存储器布局。如果struct foo
包含int
和foo
,那么如何将sizeof(int)+sizeof(foo)
字节合并到sizeof(foo)
字节中?等式A+B=A
对于A,B > 0
没有任何解决方案。
struct bedroom
{
bed b;
table t;
bedroom r;
};
您现在看到问题了吗?一间卧室需要存放无数张床和桌子。
但它一直都是龟! – StackedCrooked 2012-02-20 13:06:30
你在卧室里的桌子上做什么? – sbi 2012-02-20 13:06:59
@sbi:把我的C++书放在上面? – fredoverflow 2012-02-20 13:15:30
- 1. 结构定义包含一个自己的静态实例?
- 2. 为什么一个结构不能成为自己的成员?
- 3. 为什么我不能将DynamicMethod绑定到结构实例?
- 4. 为什么我的结构变量不包含此成员?
- 5. 为什么结构类型被定义为自己的名字?
- 6. 为什么Mako不能找到包含它的模板?
- 7. 为什么我的JQuery插件没有得到它自己的实例?
- 8. 为什么我的Google App Engine实例ID不能包含单词“admin”?
- 9. 不能使用结构从自己的包
- 10. 包含它们自己的Python类?
- 11. 模板类包含一个对它自己的实例的引用stdvector
- 12. 为什么Ruby File类不包含大小实例方法
- 13. 为什么我不能包含博客?
- 14. API体系结构 - 包含什么
- 15. 为什么打字稿有它自己的包管理器?
- 16. 为什么许多nHibernate示例代码实例包含Castle dll?
- 17. 为什么一个类返回自己的一个实例?
- 18. 它自己的实例的Python调用构造函数
- 19. 为什么结构可以存储自己的大小?
- 20. 为什么Direct3D没有自己的顶点结构?
- 21. 为什么整个包结构需要包含在Class.forName()中?
- 22. 包含结构的结构与包含指针的结构
- 23. 什么是nameser_compat.h,为什么不包含它?
- 24. 为什么我不能在Perl中实例化POSIX包?
- 25. 为什么它的0.0 ELB实例?
- 26. 为什么我不能为D中的结构实现默认构造函数?
- 27. 它为什么包含“使用哪里”?
- 28. 为什么包含模板需要自己的<cfoutput>包装?
- 29. 什么是Ruby中的方法类对象?它有什么作用 ?为什么它不能被实例化?
- 30. 什么是自包含功能?
阅读:http://stackoverflow.com/questions/588623/self-referential-struct-definition – YXD 2012-02-20 11:41:51
结构有多大? – 2012-02-20 11:41:52