如何做自动交易网站,现在pc端网站开发用的什么技术,phpcms网站title,四川网站seo设计今天在写代码时#xff0c;遇到了是否需要加头文件的问题#xff0c;看到这个博客之后收益匪浅#xff0c;因此转载该篇文章。
转载#xff1a;https://www.jianshu.com/p/9768175387b6
首先我们看这样一个示例程序: 以上代码中,类CY中有个CX类型的数据成员,我们需要在CY…今天在写代码时遇到了是否需要加头文件的问题看到这个博客之后收益匪浅因此转载该篇文章。
转载https://www.jianshu.com/p/9768175387b6
首先我们看这样一个示例程序: 以上代码中,类CY中有个CX类型的数据成员,我们需要在CY.h中包含CX.h才能编译通过。所以我们说这里的CY类依赖CX类,当CX.h修改导致CX对象的大小发生变化时(比如,新增一个数据成员或新增一个方法时), CY.cpp都需要重新编译。这在大型工程中可能会造成巨大的编译成本.
有没有办法解决这个问题? 有!使用类前置声明。
我们先看看修改之后的代码。 这里首先将CX.h的包含语句修改为CX的类前置声明,然后数据成员由CX对象修改为指向CX对象的指针。但是奇怪的是如果不将CX对象修改为指向CX对象的指针还是会编译出错。
error C2079: “CY::m_x2”使用未定义的 class“CX”
只能在指针或引用类型上使用类前置声明
当CY.h中的数据成员是CX对象时CY.h需要知道CX对象的大小当CX.h发生修改例如向CX类添加数据成员或者方法成员CX对象大小发生改变所以CY.cpp必须重新编译。
当CY.h中的数据成员是指向CX对象的指针时CY.h并不需要知道CX对象的大小因为指向CX对象的指针在给定平台上的大小是固定的。所以只需要一种“非完整性声明”也即这里的类前置声明。
引用的本质还是指针所以类前置声明也适合引用的情况。
可以使用类前置声明的几种情况
1. CY有一个类型为指向CX的指针的成员变量。 2. CY有一个类型为容器成员且容器类的元素是指向CX的指针。但是如果元素是CX对象的话则会编译出错原因是CY需要知道CX对象的大小。 3. CY中有一个函数它的返回值是CX对象/指向CX的指针/指向CX的引用或者它的参数是CX对象/指向CX的指针/指向CX的引用。 总结
合理的使用类前置声明不仅可以减少工程编译的时间更重要的是可以让你从更深的视角洞察工程的物理依赖关系从而为代码重构提供依据。在写代码的时候不妨经常问一下自己我是否真的有必要在这个头文件里包含另一个头文件