组织包含的内容

16 浏览
0 Comments

组织包含的内容

有没有一种更好的方式来组织include指令?

是不是最好将所需的文件包含在.cpp文件中,而不是.h文件中?翻译单元会受到影响吗?

如果我需要在.h文件和.cpp文件中都用到它,我应该只在.h文件中包含它吗?这会有影响吗?

将已定义的文件保存在预编译头文件(stdafx.h)中,例如std和第三方库,这是一种好的做法吗?我的自己的文件呢,我应该在创建它们时逐步将它们包含在stdafx.h文件中吗?

// myClass.h

#include

// ^-------- 应该在这里包含它吗?--------

class myClass{

myClass();

~myClass();

int calculation()

};

// myClass.cpp

#include "myClass.h"

#include

// ^-------- 或者可能在这里?--------

[..]

int myClass::calculation(){

std::string someString = "Hello World";

return someString.length();

}

// stdafx.h

#include

// ^--------- 或者也许在这里,然后在每个地方都包含stdafx.h?-------

0
0 Comments

问题的出现原因:

- 没有常见的惯例来组织include指令。

- 有人建议按字母顺序排列,但个人不喜欢,更喜欢按逻辑分组。

解决方法:

- 通常情况下,最好将需要的文件包含在.cpp文件中,而不是.h文件中。这样可以减少编译器需要打开和读取头文件的次数,从而减少整体编译时间。

- 有时也建议在头文件中尽可能提前声明类,并且只在.cpp文件中实际包含它们,原因相同。例如,"Qt人员"就是这么做的。

翻译单元是否受影响:

- 从语义角度来看,不受影响。

如果需要在.h文件和.cpp文件中都需要,应该只在.h文件中包含它吗?会有影响吗?

- 只需在头文件中包含它。

将已定义的文件放在预编译头文件(stdafx.h)中是否是一个好习惯,比如std和第三方库?我的自己的文件呢,当我创建它们时,应该将它们包含在stdafx.h文件中吗?

- 预编译头文件可以显著减少编译时间。例如:我的一个项目在启用预编译头文件的情况下包含了boost::spirit::qi,编译时间为20秒;在未启用时为80秒。通常情况下,如果你使用像boost这样的模板库,你会想要利用PCH的优势。

- 至于你代码示例中的问题:由于你在头文件中未使用std::string,所以最好将它包含在.cpp文件中。当然,也可以在stdafx.h中包含#include ,但这只会增加项目的复杂性,你几乎不会注意到任何编译加速。

0
0 Comments

在编程中,我们经常需要包含其他文件的代码,以便在当前文件中使用。然而,如何组织这些包含指令是一个有争议的问题。下面将回答一些关于包含指令的问题,并提供解决方法。

首先,有人问是否有一种首选的方式来组织包含指令。可以在上面的文章中找到答案。文章中提到了一些常见的组织方式。

接下来,有人问是否应该在.cpp文件中包含所需的文件,而不是在.h文件中。是否会影响翻译单元。文章回答是,最好将它们放在.cpp文件中。即使在定义另一个类型时需要一个已定义的类型,也可以使用前向声明。

然后,有人问如果需要在.h文件和.cpp文件中都需要该文件,是否应该只在.h文件中包含它。文章回答是只在.h文件中包含它,但建议在头文件中进行前向声明,在.cpp文件中进行包含。

最后,有人问是否将已定义的文件放在预编译头文件(stdafx.h)中是一个好的做法,例如std和第三方库。我的文件应该在创建它们的过程中逐步包含它们吗?文章作者个人没有使用过预编译头文件,但在Stackoverflow上曾有过关于此的讨论。

对于如何组织包含指令的问题,可以参考上述文章中提供的建议。根据需要在.h文件和.cpp文件中进行包含,并使用前向声明来减少包含的依赖关系。对于预编译头文件的使用,可以根据个人的实际情况进行决定。

0
0 Comments

问题的出现原因:在代码中包含头文件的方式和顺序不统一,导致代码依赖关系难以理解,维护困难。

解决方法:

1.将所有的头文件放在文件的顶部,放在一个地方,并按照一定的顺序进行分组,例如先放标准头文件,然后放第三方库的头文件(按照库进行分组),最后放自己的头文件。在整个项目中保持这个顺序一致,这样可以更容易理解依赖关系。同时,将声明内容的头文件放在最前面,确保其可以独立地被包含而不依赖其他头文件。

2.尽可能地将作用域缩小,使得头文件的改动影响尽可能少的翻译单元。这意味着,尽量只在cpp文件中包含头文件。可以使用前向声明来减少头文件中的包含数量,只有在使用给定类型的引用或指针时才需要包含头文件。

3.显式优于隐式。

4.在一些阅读后,我相信应该只在PCH中包含那些不会再发生改变的头文件,这适用于所有的标准头文件以及(可能)第三方库。对于自己的库,可以自行判断。

所以,将它们包含在.cpp文件中基本上是为了避免将它们包含在包含.h文件的所有文件中?

是的。这样可以最小化项目中的依赖关系,这对很多原因都是有益的。

为了统一代码中头文件的包含方式和顺序,以及减少代码的依赖关系,可以将所有头文件放在文件的顶部,按照一定的顺序进行分组,并将声明内容的头文件放在最前面。尽可能将头文件的作用域缩小,只在cpp文件中包含头文件,并使用前向声明来减少头文件的包含数量。同时,应该尽量显式地包含头文件,并在PCH中只包含那些不会再发生改变的头文件。

0