Ant*_*ton 3 c++ forward-declaration
我想知道在可能的情况下在所有地方使用前向声明是否有任何缺点.这是我的标题只包含声明.
据我所知,使用前向声明可加快编译时间,但我不知道有什么缺点.
啊:
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)
das*_*ght 10
使用前向声明可以改善解耦.如果您可以"A.h"通过使用前向声明来避免包含,那么使用前向声明是个好主意.最好不仅因为你的构建运行得更快(毕竟,预处理的头文件可以很好地处理编译器的效率),但是因为它告诉读者你的声明你的类的结构B不依赖于你对类的了解A,其他比它存在*.
编辑(回答你的问题)来转发的声明,我知道的是,你不能在所有情况下使用它们唯一的缺点:例如,类似这样的声明:
class B
{
A myA[10];
};
Run Code Online (Sandbox Code Playgroud)
不会编译,因为编译器需要知道的大小A.但是,编译器可以非常可靠地发现这些问题,并以明确的方式通知您.
*类的实现B很可能取决于知道类的细节A.但是,这种依赖关系成为B隐藏在您的类用户中的实现细节; 您可以随时更改它而不会破坏依赖于类的代码B.