Amb*_*ber 18
头文件是实际文件 - 存储在文件系统中,由文件名引用,以及#include在其他文件中(至少在C/C++或其他语言中使用M4宏预处理器).头文件通常将代码片段组合在一起,这些代码片段是同一特定项目的所有相互依赖的部分.例如,游戏可能具有用于其所有图形渲染的头文件.
另一方面,命名空间是编程语言的一个元素 - 它们不作为文件系统对象存在,而是作为代码中的一个指定,告诉编译器某些事物在该命名空间内.命名空间通常将类似(但不一定是相互依赖)项的接口(函数,类/结构,类型)分组.例如,stdC++中的命名空间包含所有标准库函数和类.
Adr*_*hum 15
要知道什么是Header文件,您需要知道"声明"的含义.
换句话说,在C/C++中,编译以每个源的方式进行.如果我有一个A.cpp并在里面我使用了一个函数foo(),它将被定义在其他地方,我需要告诉编译器:"嘿,我正在使用foo(),虽然你看不到它定义在我的源代码中的任何地方,不要担心,它在另一个来源中定义".他们告诉编译器这是通过在A.cpp中"声明"foo().
如果我是foo()的作者,那么使用foo()的每个人都需要写下声明void foo(); 在他们的源文件中.这将是许多重复和毫无意义的工作.而且我很难告诉那个人"使用"foo()来获得正确的声明.因此,作为foo()的作者,我写下了一个文件,其中包含使用foo()的声明,并将其分发,以便人们可以将文件内容"导入"到它们的源.我分发的文件是Header文件.导入的操作是C/C++中的#include.是的,#include只是将包含文件的内容插入到#include的位置.
命名空间是另一个故事.为了缩短它,你可以认为它是函数/类等的"真实"名称,例如,如果我做的话
namespace FOO {
class Bar { }
}
Run Code Online (Sandbox Code Playgroud)
这个类并没有真正命名为Bar,它的"真实"名称实际上是FOO :: Bar.
C++提供了一些方法来保存您通过"使用"键入长实名.
头文件是旨在包含在源文件中的文件。它们通常包含某些类和函数的声明。
命名空间使代码能够对标识符进行分类。也就是说,类、函数等可以放置在命名空间内,使它们与其他不相关的类分开。例如,在 C++ 中,标准库中的所有内容都位于std命名空间中。