【问题标题】:What is loaded into standard namespace? [duplicate]什么被加载到标准命名空间中? [复制]
【发布时间】:2016-11-28 16:44:01
【问题描述】:

我目前正在构建我的第一个更复杂的 C++ 程序,其中包含自己的命名空间。当然,我使用了几个导入。我发现奇怪的是例如包含的功能。

#include <math.h>

可以在工作区中访问

a = cos(b)

其中 cos 函数是 math.h 的一部分。另一方面,例如包含的功能。

#include <fstream>

必须通过

访问
std::ifstream

或类似的。我想了解这个

【问题讨论】:

  • 我同意这个答案。请注意,如果您“无法忍受”,您可能会说namespace math { #include &lt;math.h&gt; }。这适用于 C 头文件,通常不适用于 C++ 头文件。
  • 我同意重复的那个。我不知道这个 c 前缀 .h 的东西,所以我没有搜索它

标签: c++ namespaces


【解决方案1】:

C++ 标准库包含大部分 C 库(C 库的可选部分有一些模糊的细节)。

由于 C 没有命名空间的概念,C 库中包含的所有内容都将位于全局命名空间中。由于&lt;math.h&gt; 是一个C 头文件,它的函数被放入全局命名空间中。

C++ 标准库中包含的所有内容都将位于 std:: 命名空间中,例如包含 &lt;fstream&gt; 标头时的 std::ifstream

它变得有趣的地方是别名。例如,&lt;math.h&gt; 也可以包含为&lt;cmath&gt;。这背后的想法是您选择是否要在全局命名空间(包括&lt;math.h&gt;)或std:: 命名空间(包括&lt;cmath&gt;)中使用C 符号,但这并没有成功,通常如果您包含C++ 版本的标头(即&lt;cmath&gt;),您将获得两者。

通常,如果一个标头可以通过&lt;foo.h&gt;&lt;cfoo&gt; 包含,则它是一个C 标头。 C++ 标准库头文件没有这些别名(除非您必须处理像 iostream.h 这样显然仍然存在于某些平台上的非标准内容)。

【讨论】:

    猜你喜欢
    • 2013-09-25
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多