2013-05-15 38 views
1

我是C++的初學者,最近我被引入到像std這樣的命名空間中。但是,如果像cout和endl這樣的函數在iostream頭文件中定義,爲什麼包含std名稱空間呢?或者這些函數實際上是在std命名空間中定義的?如果是這種情況,那麼爲什麼包含iostream文件?爲什麼使用命名空間如果iostream被導入

回答

1

命名空間和#include指令是不同的東西:

當你有一個標題(如iostream的)你告訴預處理器在處理該文件的內容,如果這些內容已在源程序中出現指出包含出現的地方。

爲什麼使用includes而不是隻是在那裏拋出代碼?

來自: http://www.cplusplus.com/forum/articles/10627/

(1)它加快了編譯時間。隨着程序的增長,您的代碼也會增加,如果所有代碼都在單個文件中,那麼每次進行任何小改動時,都必須全部重新編譯 。對於小程序來說,這可能不是 似乎是個大問題(但事實並非如此),但是當您的 具有合理的大小項目時,編譯時間可能需要幾分鐘的時間才能編譯整個程序。你能想象在每次小改變之間都需要等待 嗎?

編譯/等待約8分鐘/ 「廢話哦,忘了一個分號」/編譯/ 耐心等待8分鐘/調試/編譯/等待約8分鐘/等

(2)它使你的代碼更有條理。如果您將概念分解爲 特定文件,那麼當您想修改 (或者只是看看它如何記住 的使用方式和/或它的工作原理)時,找到您正在查找的代碼會更容易。

(3)它允許你將接口與實現分開。如果你 不明白這意味着什麼,不要擔心,我們將在整篇文章中看到它的行動 。

另一方面,命名空間允許您在範圍下對類和函數進行分組。它們提供了避免這些實體之間名稱衝突的方式,而沒有處理嵌套類的不便。

4

C++文件可以在其中有一個名稱空間,並且不同的C++文件可以在它們內部具有相同的名稱空間。

// Header1.h 
namespace SomeScope 
{ 
    extern int x; 
} 

// Header2.h 
namespace SomeScope 
{ 
    extern int y; 
} 

// Some CPP file 
#include "Header1.h" // access to x 
SomeScope::x = 5; 

#include "Header2.h" // access to y 
SomeScope::y = 6; 

我希望這會有所幫助。命名空間就像一個存儲各種標識符的地方,以避免名稱衝突。 SomeScope::x是與AnotherScope::x完全不同的x標識符。

0

如果您使用namespace std,則不必以std :: cout爲例。 在這種情況下編寫cout就足夠了。