【问题标题】:What is the difference between header file and namespace?头文件和命名空间有什么区别?
【发布时间】:2010-07-19 06:27:25
【问题描述】:

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

【问题讨论】:

    标签: c++ namespaces header-files


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      要知道什么是头文件,你需要知道“声明”的含义。

      简而言之,在 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++ 提供了一些方法,通过“使用”来节省您输入长实名的时间。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 头文件包含原型、声明。
        • @Vish:你是在告诉我还是在问我?严格来说,没有原型这样的东西。这只是一个声明。
        【解决方案4】:

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

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

        在此处了解更多信息 http://en.wikipedia.org/wiki/Namespacehttp://en.wikipedia.org/wiki/Header_file

        【讨论】:

          【解决方案5】:

          命名空间是“ansi c++”的一个新概念,用于识别程序中经常使用的全局标识符。

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

          【讨论】:

          • 您的回答包含一些有用的信息,如果您花更多精力编写可读的英语并提供更多详细信息,可能会更好地接受。希望您在 StackOverflow 上有很好的体验!
          • 谢谢!我做了一些编辑。下次我会改进它们。
          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-01-01
            • 2014-08-10
            • 2012-07-10
            • 1970-01-01
            • 2011-12-10
            • 2014-09-18
            • 1970-01-01
            • 2020-07-25
            相关资源
            最近更新 更多