在引入 C++ 98 标准之前命名空间是否存在?

bus*_*bug 2 c++ namespaces c++98

我读了这一页。 没有扩展名的 C++ 头文件 我理解该评论是说命名空间甚至在引入 C++ 标准之前就已经存在。那么,该评论不是说命名空间和缺少文件扩展名不相关吗?然而,下面的注释没有提到cout在iostream.h中使用时如何使用命名空间。

所以我的问题是:

  1. 在引入 C++ 98 标准之前,命名空间真的存在吗?
  2. 如果是这样,cout在 iostream.h 中使用时如何使用命名空间?

Jer*_*fin 6

该委员会于 1993 年投票决定将名称空间纳入该标准。此后不久,大多数编译器都支持它,所以在该标准获得批准之前大约 5 年。

没有扩展名的标头大约在同一时间发生,因此大多数情况下,当您使用时iostream.h,您只是使用cout << foo;,而当您切换到时iostream,您使用std::cout << foo;

iostream.h为了向后兼容,许多编译器在提供iostream. 通常是这样的:

#include <iostream>
using namespace std;
Run Code Online (Sandbox Code Playgroud)

这足以编译许多相当简单的程序,但会破坏一些进入旧库代码的黑暗角落的内容(老实说,甚至不是非常黑暗的角落)。

但其他编译器有两个完全独立的库,因此iostream.h包含一个和iostream另一个的声明。