头文件和命名空间有什么区别?

时间:2010-07-19 06:27:25

标签: c++ namespaces header-files

我想知道Header文件(如MyHeader.hpp中)与namespace中的c++之间的确切区别?

7 个答案:

答案 0 :(得分:17)

头文件是实际文件 - 存储在文件系统中,由文件名引用,#include'在其他文件中(至少在C / C ++或使用M4宏预处理器的其他语言中)。头文件通常将代码片段组合在一起,这些代码片段是同一特定项目的所有相互依赖的部分。例如,游戏可能有一个头文件用于其所有图形渲染。

另一方面,命名空间是编程语言的一个元素 - 它们不作为文件系统对象存在,而是作为代码中的一个名称告诉编译器某些事物在该命名空间内。命名空间通常将类似(但不一定是相互依赖)项的接口(函数,类/结构,类型)分组。例如,C ++中的std命名空间包含所有标准库函数和类。

答案 1 :(得分: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 { }
}

这个类并没有真正命名为Bar,它的“真实”名称实际上是FOO :: Bar。

C ++提供了一些方法来通过“使用”来保存您输入长实名。

答案 2 :(得分:3)

头文件是供源文件包含的文件。它们通常包含某些类和函数的声明。

命名空间使代码能够对标识符进行分类。也就是说,类,函数等可以放在命名空间中,使它们与其他不相关的类分开。例如,在C ++中,标准库中的所有内容都在std命名空间中。

答案 3 :(得分:0)

在普通人langauge中,头文件将是文件系统上的唯一文件,命名空间将覆盖一个或多个文件。

即。 HeaderFile是物理的东西,命名空间是合乎逻辑的东西。

http://en.wikipedia.org/wiki/Namespacehttp://en.wikipedia.org/wiki/Header_file

了解更多相关信息

答案 4 :(得分:0)

命名空间是' ansi c ++'的新概念。识别程序中经常使用的全局标识符。

头文件是一个源文件,它通过重用可靠且经过测试的代码来支持您的程序,从而节省时间和精力!!!!

答案 5 :(得分:-1)

头文件基本上是文件系统,它是物理的东西,如果不包括头文件,它会包含类和函数,并尝试执行一些操作,例如将大写字符串转换为小写字母,计算字符串长度,包含头文件string.h,通过该头文件,编译器可以了解您正在对字符串执行操作 并且在执行代码时,它将与此类函数所在的相应库链接 另一方面,名称空间是程序的一部分,这是合乎逻辑的,它旨在提供一种使一组名称彼此分离的方法。在一个名称空间中声明的类名与在另一个名称空间中声明的同一个类名不冲突。所有名称空间都位于.net框架类库中,该类库是名称空间层次结构的巨大集合。每个名称空间都包含类,结构,接口,枚举,委托...等等...

答案 6 :(得分:-4)

命名空间是给头文件的新单词。使新版本可用。