main.cpp能否直接使用间接包含的头文件中声明的类?
问题解答
结论:可以直接在main.cpp中使用class b。
原因很简单:C++的头文件包含是预编译阶段的文本替换过程。当main.cpp包含a.h时,预处理器会把a.h的内容完整插入到main.cpp对应位置;而a.h又包含了b.h,所以b.h里的class b声明也会被间接插入到main.cpp的代码中。相当于main.cpp间接获得了class b的声明,自然可以直接使用。
用实际代码示例更直观:
b.h内容:
class b { // 类成员定义 };
a.h内容:
#include "b.h" // a.h的其他代码
main.cpp内容:
#include "a.h" int main() { b obj; // 此处可直接使用class b,编译无问题 return 0; }
预编译完成后,main.cpp会被展开成类似这样的内容:
// 来自b.h的代码 class b { // 类成员定义 }; // 来自a.h的其他代码 int main() { b obj; return 0; }
不过要注意,这种间接包含虽然能正常工作,但并非推荐的编码风格。如果main.cpp明确需要使用class b,最好直接在main.cpp中包含b.h——这样代码可读性更强,也能避免后续a.h不再包含b.h时,main.cpp突然编译失败的情况。
内容的提问来源于stack exchange,提问作者gasoon
相关产品推荐
相关产品推荐

