c++ - 什么被加载到标准命名空间?

标签 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/

相关文章:

c++ - C 和 C++ 中的位字段 : where are they used?

c++ - 有效地查找位于圆内的数组的索引

c++ - 用户完成拖放后重新排列多个选定的 ListView 项目

c++ - 既然 C++ 知道类型,它能推断出点和箭头吗?

php - Laravel - 调用未定义的方法 TrainingFacade::save()

c++ - 如何编写和调用std::hash? -用于gmp的mpz_class和mpz_t

c++ - Qt 小部件项目中的 Ui 命名空间

如果在 c 中的结构内定义,枚举的范围是否有限

php - 访问命名空间内的 carbon_get_post_meta 值

c++ - 在命名空间/头文件中找不到类