<分区>
我目前正在构建我的第一个更复杂的 C++ 程序,它包含一个自己的命名空间。当然,我使用了几个进口产品。我发现奇怪的是 eg 中包含的功能。
#include <math.h>
可以在工作区内访问
a = cos(b)
cos 函数是 math.h 的一部分。另一方面,函数包含在 eg 中。
#include <fstream>
必须通过
访问std::ifstream
或类似的。我想明白这一点
标签 c++ namespaces
<分区>
我目前正在构建我的第一个更复杂的 C++ 程序,它包含一个自己的命名空间。当然,我使用了几个进口产品。我发现奇怪的是 eg 中包含的功能。
#include <math.h>
可以在工作区内访问
a = cos(b)
cos 函数是 math.h 的一部分。另一方面,函数包含在 eg 中。
#include <fstream>
必须通过
访问std::ifstream
或类似的。我想明白这一点
最佳答案
C++ 标准库包括大部分 C 库(C 库的可选部分有一些模糊的细节)。
由于 C 没有命名空间的概念,因此 C 库中包含的所有内容都将位于全局命名空间中。自 <math.h>
是一个C头文件,它的函数被放入全局命名空间。
C++ 标准库中包含的所有内容都将在 std::
中命名空间,例如 std::ifstream
当你包括 <fstream>
标题。
有趣的是别名。例如,<math.h>
也可以包含为 <cmath>
.这背后的想法是您选择是否要在全局命名空间(包括 <math.h>
)或 std::
中使用 C 符号。命名空间(包括 <cmath>
),但这并没有奏效,通常如果您包含 header 的 C++ 版本(即 <cmath>
),您将同时获得这两者。
通常,如果可以通过 <foo.h>
包含 header 或通过 <cfoo>
,它是一个 C 头文件。 C++ 标准库 header 没有这些别名(除非您必须处理非标准的东西,例如 iostream.h
,它们显然仍然存在于某些平台上)。
关于c++ - 什么被加载到标准命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38566085/