我是C++的初學者,最近我被引入到像std這樣的命名空間中。但是,如果像cout和endl這樣的函數在iostream頭文件中定義,爲什麼包含std名稱空間呢?或者這些函數實際上是在std命名空間中定義的?如果是這種情況,那麼爲什麼包含iostream文件?爲什麼使用命名空間如果iostream被導入
1
A
回答
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就足夠了。
相關問題
- 1. 命名空間被自動導入
- 2. VBA - 導入命名空間?
- 3. 導入Microsoft.Sharepoint命名空間
- 4. 導入命名空間System.Query
- 5. Typescript - 將命名空間導入另一個命名空間
- 6. 導入命名空間無法找到命名空間
- 7. 爲什麼stdClass命名空間?
- 8. 爲什麼沒有Microsoft.Win64命名空間?
- 9. 的Python:如何導入命名空間
- 10. 如何導入命名空間?
- 11. 這是什麼XSD導入命名空間?
- 12. 在R中的命名空間導入有什麼好處?
- 13. 爲什麼我在RStudio中獲得「命名空間被鎖定」?
- 14. 導入命名空間的別名
- 15. 鉤入wpf xmlns命名空間導入
- 16. 的XmlSlurper命名空間不被使用
- 17. 「導出爲命名空間foo」的目的是什麼?
- 18. 什麼時候匿名命名空間數據被初始化?
- 19. 命名空間是什麼?用法呢?
- 20. 爲什麼「使用命名空間系統」導致缺少類型說明符?
- 21. 爲什麼樣式和佈局使用android命名空間?
- 22. 使用RequireJS的Javascript命名空間,爲什麼?
- 23. xml.writer - 爲什麼要使用XHTML命名空間?
- 24. 爲什麼我不得不使用完整的命名空間?
- 25. 爲什麼.NET Core和xUnit不能識別我導入的命名空間?
- 26. 爲什麼導入PHP函數到當前的命名空間不支持
- 27. 導入命名空間類專門
- 28. 剃刀導入命名空間
- 29. 防止導入命名空間
- 30. 在CodeSnippetCompileUnit中導入命名空間