
class foo; // This here?class bar{ bar();}; 使用它时是否需要包含声明?
谢谢.
解决方法 头等舱foo;被称为foo类的 forward declaration.它只是让编译器知道它存在并且它命名一个类.这使得foo被称为“不完整类型”(除非已经看到foo的完整声明).对于不完整的类型,您可以声明该类型的指针,但不能分配该类型的实例或执行任何需要知道其大小或成员的内容.当两个类型各自可能具有指向彼此的指针时经常使用这种前向声明,在这种情况下,两者都需要能够表达指向另一个类型的指针的概念,因此您将具有循环依赖性而没有这样的事物.这主要是因为C使用单一传递机制来解析类型;在Java中,您可以拥有循环依赖,而无需前向声明,因为Java使用多次传递.您还可能会看到前向声明,其中作者误以为使用前向声明而不是包含所需的标头会缩短编译时间;当然,情况并非如此,因为你需要包含完整的声明(即标题),如果使用预处理器保护,那么编译时间基本没有区别.
要回答关于是否需要包含的问题…假设您只需要部分类型,那么您的标题不需要直接包含已声明的类型的标题;但是,无论谁使用你的标题,当他们使用你的类型时,都需要包含前向声明类型的标题,所以你不妨只包括另一个标题.
总结以上是内存溢出为你收集整理的c – 类foo;在头文件中全部内容,希望文章能够帮你解决c – 类foo;在头文件中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)