如果您有一组带有包含保护的头文件,是否真的有必要进行前向声明?
我一直出于习惯在这样做,所以我建议一位同事在他们的代码中添加前向声明,但是当他们询问是否确实需要包含已存在的包含保护措施时,我有点的损失。看来这是个好习惯,但是难道没有让守卫解决前向声明所能解决的所有问题吗?
这是一个例子。假设我有一个这样的头文件:
//This is the header file of class B
class MyClassA; //This is forward declaration
class B{
private:
MyClassA *myClass; //pointer to MyClassA
public:
B(){}
~B(){};
void print(MyClassA* myClass); //Passing by reference. Not calling any methods of MyClassA.
}
如果我知道MyClassA.h中有一个include防护,那么上面的方法会比下面的方法更好吗?而且,如果是这样,为什么?
#include “MyClassA.h”
class B{
private:
MyClassA *myClass; //pointer to MyClassA
public:
B(){}
~B(){};
void print(MyClassA* myClass); //Passing by reference. Not calling any methods of MyClassA.
}
第二个示例还会阻止循环声明/多重声明吗?
答案 0 :(得分:1)
您正在混合两个不相关的概念。
仅在需要按名称的名称时使用前向声明。
使用include防护可防止在单个翻译单元(即.cpp文件)中多次处理同一代码。是否使用包含保护取决于.h文件的预期用途。大多数情况下,您不希望在.cpp文件中多次处理文件的内容,但是在某些情况下,允许这样做至关重要。对于以后的用途类别,不得使用包含防护。
您可以随意组合它们。
可以: