是否可以在c ++中查看命名空间的所有内容?

时间:2017-07-16 00:39:22

标签: c++ namespaces std using

执行命令时:

using namespace std;

您可以直接访问std命名空间的所有元素。但是假设您只想使用std::coutstd::endl,那么最好使用该指令:

using std::cout;
using std::endl;

所以你只能获得你需要使用的对象而不是全部。 我的问题是: 有没有办法查看使用命令时添加的内容:

using namespace std;

类似的东西:(我知道这是非常错误的。)

#include <iostream>
using namespace std;

int main(){

cout << std;

return 0;
}

2 个答案:

答案 0 :(得分:0)

查看命名空间提供内容的工具是提供该命名空间和定义命名空间内容的标头的文档。
由于标题通常是高度优化的,而不是真正适合人眼,所以最好的方法是阅读doucmentation 例如,std内部的内容可以在很多网站上找到。

查看任何其他命名空间,您(希望)也可以获得文档和标题。

对于以编程方式“观看”,我恐怕不得不同意Sam。

答案 1 :(得分:-2)

当您声明正在使用namespace std时,您告诉编译器可以访问特定命名空间中的所有函数和对象,而无需为命名空间的名称添加前缀。

您导入的iostream实际上只是一个标题。但是在这个头文件中声明了原型,并且这些原型在命名空间内组织(在这种情况下为std)。

根据C ++标准开发库,文件iostream的内容可能会有所不同。但是标准库的实现是......标准的。

在这里查看源代码示例:GCC - Libstdc++ iostream

您可以在标题中看到namespace std中声明的函数:

00043 namespace std _GLIBCXX_VISIBILITY(default)
00044 {
...
00061   extern istream cin;       /// Linked to standard input
00062   extern ostream cout;      /// Linked to standard output
00063   extern ostream cerr;      /// Linked to standard error (unbuffered)
00064   extern ostream clog;      /// Linked to standard error (buffered)
...
00067   extern wistream wcin;     /// Linked to standard input
00068   extern wostream wcout;    /// Linked to standard output
00069   extern wostream wcerr;    /// Linked to standard error (unbuffered)
00070   extern wostream wclog;    /// Linked to standard error (buffered)
...

请注意,某些IDE(Visual Studio和cons)可能会为您提供语法完成功能,允许您查看命名空间或类范围内的内容。