我现在正在学习C++,我想我很了解关于包含标题的大部分知识。来自于根本没有必要这样做的语言,我常常觉得“这是错误的”,或者应该有一个更简单的方法来做到这一点:
发布于 2013-06-11 14:03:02
1.我发现在我想使用向量的每一个类中包括(例如)是非常烦人的。有更好的办法吗?
想象一下,对于使用您的代码的其他人(另一个可能是,您未来的自我)来说,这是多么的烦人,并得到一个编译错误,因为<vector>缺少一个标头。写一次,多用一遍。
2.我有大量的核心功能(也在它的单独名称空间中),有相当多的类不经常变化。虽然我不需要每个类中的所有功能,但是最好只有一个头文件,包括它并完成它.做这件事最好的方法是什么?
如果您允许IDE自动将其作为预编译头包含进来,则可以这样做以加快速度。但是,就正确性和可移植性而言,您不应该依赖它,而且总是让每个标头都可以作为独立的标头编译。参见亚历山大斯库&萨特氏编码标准中的第23项。像CMake这样的构建系统甚至有宏来测试。
3.在预编译的头文件中包含标头是一种错误的做法吗?如果是,为什么?
您可以这样做,但最好让IDE这样做,以便获得更好的可移植性。并且这些头最好是稳定的(标准库或Boost,例如,但绝不是您自己的项目标题)。
发布于 2013-06-11 14:01:11
你认为你所需要的,在你需要的地方#include是“错误的”很可能来自--至少部分--你的偏见来自于没有必要的其他语言。
在C++中,驱动许多范例的哲学是:“你不为你不使用或不需要的东西付费。”此清单的一种方式是需要#include为您正在编写的组件所需的任何头。没有什么是#include自动编辑的。
有一些现成的捷径可以让这件事变得更简单。这样的快捷方式之一就是使用所谓的预编译头,即全局标头,它本身就是#include,所有在全球范围内使用的低级别的东西都在您的项目中使用。您可以在任何需要它的文件中编写这样的头和#include,而不是#include处理几个(或几十个)单独的文件。
“你不用花钱买你不使用的东西”哲学的好处之一是在编译时收获。如果您只需要3个小的头文件,那么#include只需要这三个文件,而不是几十个不必要的cruft,就会加快编译时间。
发布于 2013-06-11 13:57:02
https://stackoverflow.com/questions/17045818
复制相似问题