c – 类foo;在头文件中
发布时间:2020-12-16 10:39:35 所属栏目:百科 来源:网络整理
导读:是否有人能够解释为什么头文件有这样的东西? class foo; // This here?class bar{ bar();}; 使用它时是否需要包含声明? 谢谢. 解决方法 头等舱foo;被称为foo类的 forward declaration.它只是让编译器知道它存在并且它命名一个类.这使得foo被称为“不完整类
是否有人能够解释为什么头文件有这样的东西?
class foo; // This here? class bar { bar(); }; 使用它时是否需要包含声明? 谢谢. 解决方法
头等舱foo;被称为foo类的
forward declaration.它只是让编译器知道它存在并且它命名一个类.这使得foo被称为“不完整类型”(除非已经看到foo的完整声明).对于不完整的类型,您可以声明该类型的指针,但不能分配该类型的实例或执行任何需要知道其大小或成员的内容.
当两个类型各自可能具有指向彼此的指针时经常使用这种前向声明,在这种情况下,两者都需要能够表达指向另一个类型的指针的概念,因此您将具有循环依赖性而没有这样的事物.这主要是因为C使用单一传递机制来解析类型;在Java中,您可以拥有循环依赖,而无需前向声明,因为Java使用多次传递.您还可能会看到前向声明,其中作者误以为使用前向声明而不是包含所需的标头会缩短编译时间;当然,情况并非如此,因为你需要包含完整的声明(即标题),如果使用预处理器保护,那么编译时间基本没有区别. 要回答关于是否需要包含的问题…假设您只需要部分类型,那么您的标题不需要直接包含已声明的类型的标题;但是,无论谁使用你的标题,当他们使用你的类型时,都需要包含前向声明类型的标题,所以你不妨只包括另一个标题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |