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

Did the namespaces exist prior to the introduction of the C++ 98 standard?

提问人:busbug 提问时间:4/13/2023 最后编辑:busbug 更新时间:4/15/2023 访问量:410

问:

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

所以我的问题是:

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

评论

0赞 Pepijn Kramer 4/13/2023
没有一个标准......所以这有点像先有鸡还是先有蛋的情况。我知道 Watcom C++ 编译器从 9.5 版(C++ / 1994 的第一个版本)开始支持命名空间,尽管我在 1996 年开始使用它。(en.wikipedia.org/wiki/Watcom_C/C%2B%2B)
1赞 Pepijn Kramer 4/13/2023
另请参阅:iostream-in-borland-c-compiler
0赞 paddy 4/13/2023
C++直到 90 年代初才开始走向标准化。 en.cppreference.com/w/cpp/language/history
0赞 user12002570 4/13/2023
@molbdnilo我明白了。

答:

6赞 Jerry Coffin 4/13/2023 #1

该委员会在 1993 年投票决定接受命名空间进入标准。在那之后不久,大多数编译器都支持它,因此在标准获得批准之前大约有 5 年的时间。

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

为了向后兼容,许多编译器在拥有 .通常是这样的:iostream.hiostream

#include <iostream>
using namespace std;

这对于许多相当简单的程序来说已经足够了,但与一些进入旧库代码的黑暗角落(老实说,甚至不是非常黑暗的角落)的程序一起打破了。

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

1赞 Lemonina 4/13/2023 #2

命名空间概念在 90 年代被引入 C++,但功能和语法在 C++98 标准中得到了改进

请注意,头文件不是 C++ 标准库的一部分——它被早期版本的 Borland 编译器用于 MS-DOS,并且已被弃用用于标准头文件iostream.h<iostream>

cout对象在命名空间中的标准标头 => 这就是为什么要使用它,您必须:std<iostream>

  • 使用前缀进行限定
std::cout
  • 或将 std 命名空间纳入范围
namespace std;

评论

2赞 Pete Becker 4/13/2023
回复:“被早期版本的 Borland 编译器使用”——字面意思是正确的,但具有误导性; 来自 Cfront,这是 C++ 的原始贝尔实验室实现。而且,从形式上讲,没有被弃用;它从未存在于 C++ 标准中。“已弃用”表示当前版本的标准支持某些内容,但将来可能会被删除。<iostream.h><iostream.h>