相关疑难解决方法(0)

是否应该使用前向声明而不是尽可能包括?

每当类声明仅使用另一个类作为指针时,使用类前向声明​​而不是包含头文件是否有意义,以便先发制人地避免循环依赖的问题?所以,而不是:

//file C.h
#include "A.h"
#include "B.h"

class C{
    A* a;
    B b;
    ...
};
Run Code Online (Sandbox Code Playgroud)

改为:

//file C.h
#include "B.h"

class A;

class C{
    A* a;
    B b;
    ...
};


//file C.cpp
#include "C.h"
#include "A.h"
...
Run Code Online (Sandbox Code Playgroud)

有什么理由不尽可能不这样做吗?

c++ forward-declaration

74
推荐指数
7
解决办法
3万
查看次数

包含在头文件与前向声明中,并包含在.cpp中

我有一个B类,我想把成员称为A类.所以:

1.

//A.h    
class B; 
class A 
{ 
private:
    B* m_p; 
}; 

//a.cpp
#include "B.h"
Run Code Online (Sandbox Code Playgroud)

2.

// A.h
#include "B.h"

class A 
{ 
private: 
    B * impl_; 
}; 
Run Code Online (Sandbox Code Playgroud)

当一个没有太多依赖性的小项目涉及时,这两种方式是否更好?

c++ header-files

29
推荐指数
3
解决办法
2万
查看次数

5
推荐指数
3
解决办法
2461
查看次数

前瞻性声明的缺点是什么?

我想知道在可能的情况下在所有地方使用前向声明是否有任何缺点.这是我的标题只包含声明.

据我所知,使用前向声明可加快编译时间,但我不知道有什么缺点.

例:

啊:

Class A
{
};
Run Code Online (Sandbox Code Playgroud)

BH:

// Should I use and include "a.h" in the cpp file (e.g., a.cpp)
Class A;
Class B
{
    doSomething(A *a);
    A *myA;
};
Run Code Online (Sandbox Code Playgroud)

或者它是否更好用

BH:

#include "a.h"

Class B
{
    doSomething(A *a);
    A *myA;
};
Run Code Online (Sandbox Code Playgroud)

c++ forward-declaration

3
推荐指数
1
解决办法
1924
查看次数