【发布时间】:2010-07-19 06:27:25
【问题描述】:
我想知道头文件(如 MyHeader.hpp 中的)和 c++ 中的 namespace 之间的确切区别?
【问题讨论】:
标签: c++ namespaces header-files
我想知道头文件(如 MyHeader.hpp 中的)和 c++ 中的 namespace 之间的确切区别?
【问题讨论】:
标签: c++ namespaces header-files
头文件是实际文件 - 存储在文件系统中,由文件名引用,#include'd 在其他文件中(至少,在 C/C++ 或使用 M4 宏预处理器的其他语言中)。头文件通常将同一特定项目的所有相互依赖的部分代码组合在一起。例如,一个游戏可能有一个用于其所有图形渲染的头文件。
另一方面,命名空间是编程语言的一个元素——它们不作为文件系统对象存在,而是作为代码中的一个名称,告诉编译器某些东西在该命名空间内。命名空间通常对相似(但不一定相互依赖)项的接口(函数、类/结构、类型)进行分组。例如,C++ 中的 std 命名空间包含所有标准库函数和类。
【讨论】:
要知道什么是头文件,你需要知道“声明”的含义。
简而言之,在 C/C++ 中,编译以每个源代码的方式进行。如果我有一个 A.cpp 并且在里面我使用了一个函数 foo(),它将在其他地方定义,我需要告诉编译器:“嘿,我正在使用 foo(),虽然你看不到它的定义在我的来源中的任何地方,别担心,它是在另一个来源中定义的”。他们告诉编译器这一点的方法是在 A.cpp 中“声明” foo()。
如果我是 foo() 的作者,每个使用 foo() 的人都需要写下声明 无效的富(); 在他们的源文件中。这将是大量重复和无意义的工作。我很难告诉那个“使用” foo() 的人有一个正确的声明。因此,作为 foo() 的作者,我写下一个文件,其中包含使用 foo() 的声明,并将其分发,以便人们可以将文件内容“导入”到他们的源。我分发的文件是头文件。 import 的动作是 C/C++ 中的#include。是的,#include 只不过是将包含文件的内容插入到#include 的位置。
命名空间是另一回事。简而言之,您可以认为它是函数/类等的“真实”名称,例如,如果我让
namespace FOO {
class Bar { }
}
该类并不是真正的 Bar,它的“真实”名称实际上是 FOO::Bar。
C++ 提供了一些方法,通过“使用”来节省您输入长实名的时间。
【讨论】:
头文件是旨在包含在源文件中的文件。它们通常包含某些类和函数的声明。
命名空间使代码能够对标识符进行分类。也就是说,类、函数等可以放在命名空间内,将它们与其他不相关的类分开。例如,在 C++ 中,标准库中的所有内容都位于 std 命名空间中。
【讨论】:
在普通人的语言中,头文件将是文件系统上的唯一文件,命名空间将覆盖一个或多个文件。
即HeaderFile 是物理的东西,命名空间是逻辑的东西。
在此处了解更多信息 http://en.wikipedia.org/wiki/Namespace 和 http://en.wikipedia.org/wiki/Header_file
【讨论】:
命名空间是“ansi c++”的一个新概念,用于识别程序中经常使用的全局标识符。
头文件是一个源文件,它通过重用可靠且经过测试的代码来支持您的程序,从而节省时间和精力!!!!
【讨论】:
命名空间是赋予头文件的新词。使新版本可用。
【讨论】: