2017-07-16 73 views
0

當你這樣做的命令:是否可以在C++中查看命名空間的所有內容?

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; 
} 
+0

您可以隨時查看源代碼。 – Charles

+0

C++語言規範中沒有任何內容可以爲您提供這個功能。你將需要查看你正在使用的任何C++編譯器的文檔。也許你的C++編譯器有一些編譯器特定的工具,你可以用它來獲取這些信息。 –

+0

可用於列出命名空間中的內容的唯一真正工具是該命名空間中內容的文檔。對於命名空間'std',該文檔處於標準(跨越數百頁)和各種參考文檔,可以在線獲取。由於命名空間可以跨多個編譯單元(和頭文件)進行聲明,因此編譯器可能無法識別命名空間中的所有內容。 – Peter

回答

-1

當你聲明您正在使用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和缺點)可能爲您提供語法完成,允許您查看名稱空間或類作用域內的內容。

1

查看命名空間提供的內容的工具是提供名稱空間和定義名稱空間內容的頭文件。
由於頭文件經常是高度優化的,而不是真的用於人眼,所以最好的方法是讀取文件。
例如,std內部的調諧可在許多網站上獲得。

看着任何其他命名空間,你(希望)也可以獲得文檔和頭文件。

對於以編程方式「查看」,恐怕我不得不同意薩姆。

相關問題