我目前正在构建我的第一个更复杂的C ++程序,它包含一个自己的命名空间。当然,我使用了几种进口。我发现奇怪的是,功能包含在例如。
#include <math.h>
可以在工作区内访问
a = cos(b)
其中cos函数是math.h的一部分。另一方面,功能包括例如
#include <fstream>
必须通过
加入std::ifstream
或类似的。我想了解这个
答案 0 :(得分:4)
C ++标准库包含大部分C库(C库的可选部分周围有一些模糊的细节)。
由于C没有命名空间的概念,因此C库中包含的所有内容都将位于全局命名空间中。由于<math.h>
是一个C头,因此将其函数放入全局命名空间。
当您包含std::
标题时,C ++标准库中包含的所有内容都将位于std::ifstream
命名空间中,例如<fstream>
。
它变得有趣,是别名。例如,<math.h>
也可以包含在<cmath>
中。这背后的想法是你选择是否要在全局命名空间(包括<math.h>
)或std::
命名空间(包括<cmath>
)中使用C符号,但这并不是一般来说,如果你包含标题的C ++版本(即<cmath>
),你将获得两者。
通常情况下,如果标题可以通过<foo.h>
或<cfoo>
包含,则可以是C标头。 C ++标准库头文件没有这些别名(除非你必须处理某些平台上显然仍然存在的iostream.h
等非标准内容)。