为什么有名称空间时的标题?

时间:2015-11-22 02:59:46

标签: c++ namespaces

  

标准C ++库的所有实体(变量,类型,常量和函数)都在std命名空间中声明。

Namespaces

现在如果在std命名空间中“声明”了所有内容,为什么这些花哨的标题出现在那里?

已经检查过this,但它没有用。

4 个答案:

答案 0 :(得分:1)

命名空间是一种组织我们类型的方法。将所有数学函数保存在MyMath命名空间等中。它也是一种分离类型的方法,这样它们就不会与其他类型冲突。因此,您可以在代码中同时拥有MyTypes :: string和stl :: string。 std名称空间是STL为其内容选择的名称空间。

头文件包含代码的公共接口。它为您提供了它可用的内容,它声明的类型和功能,并希望在评论中记录如何使用它。如果您尝试使用代码而不包含其相应的头文件,则代码将无法编译,因为它无法找到类型。标头可能包含也可能不包含名称空间中的代码。

答案 1 :(得分:1)

如您所知,当您在 b.cpp 中加入#include "a.h"之类的内容时,内的所有内容都会被放置,而不是#include "a.h" b.cpp 。因此,如果 a.h 是200行代码而您的实际代码是10行代码,那么将编译的代码将是大约210行代码。如果您的 a.h 很大或者您多次包含它,编译时间会增加。(请注意,如果a.h中包含某些内容,请重复此故事。)
我们假设std库位于一个 .h 文件和std命名空间内。现在它真的很大,在每个文件中你将使用std类之一,即使是最小的类,你也必须包含整个类。它使你的程序真的很大,编译真的很慢。

答案 2 :(得分:0)

您需要的代码段。头文件其中标准库实体实际上是声明。由于标准库中包含的实体的大小和多样性,有多个标头。从本质上讲,声明是根据功能分组的。

答案 3 :(得分:-1)

标题和命名空间实际上是无关的;一个与另一个没有任何关系。

因此,人们也不会以任何方式使其他人过时。

请考虑std::string中可能找到的<string>声明:

namespace std {
   typedef basic_string<char> string;
}
  • 命名空间是声明创建(和使用)的名称的分类;
  • 标头文件是将声明存储在硬盘上的分类。

没有&#34;重新声明&#34;因为这两个概念是无关的。