提问人:busbug 提问时间:4/13/2023 最后编辑:busbug 更新时间:4/15/2023 访问量:410
命名空间在引入 C++ 98 标准之前是否存在?
Did the namespaces exist prior to the introduction of the C++ 98 standard?
问:
我读了这个页面。不带扩展名的 C++ 头文件我把这个评论理解为命名空间甚至在引入 C++ 标准之前就已经存在了。
那么,该评论不是说命名空间和没有文件扩展名无关吗?
但是,以下评论没有提到在 iostream.h 中使用命名空间时如何使用命名空间。cout
所以我的问题是:
- 在引入 C++ 98 标准之前,命名空间真的存在吗?
- 如果是真的,在 iostream.h 中使用时如何使用命名空间?
cout
答:
6赞
Jerry Coffin
4/13/2023
#1
该委员会在 1993 年投票决定接受命名空间进入标准。在那之后不久,大多数编译器都支持它,因此在标准获得批准之前大约有 5 年的时间。
没有扩展名的标头大约在同一时间发生,因此大多数情况下,当您使用 时,您只是使用 ,而当您切换到 时,您使用了 .iostream.h
cout << foo;
iostream
std::cout << foo;
为了向后兼容,许多编译器在拥有 .通常是这样的:iostream.h
iostream
#include <iostream>
using namespace std;
这对于许多相当简单的程序来说已经足够了,但与一些进入旧库代码的黑暗角落(老实说,甚至不是非常黑暗的角落)的程序一起打破了。
不过,其他编译器有两个完全独立的库,因此包含一个库和另一个库的声明。iostream.h
iostream
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>
评论