C++ 的命名空間

剛開始寫C++程式,一定會碰到所謂的命名空間問題。命名空間,其實是namespace的直譯名稱,實際上,我到現在還是覺得這名稱好像不具備什麼描述能力。

命名空間是避免大家使用同樣的名稱為類別、物件命名的一種機制。我們可做這樣的比喻:在現實生活中,我們可能會在同一班就遇到同名同姓的人, 但 C++ 程式 (同一班) 卻不允許有同名同姓的情況發生,因為當有同名同姓的人出現時,電腦會無法判斷到底現在是在叫哪個人而產生程式的錯誤。

但是如果就是有同名同姓的人呢?這時候,C++程式就會將他們區分為不同班 (不同的命名空間), 如此一來 C++ 編譯器就不會弄錯,造成編譯錯誤;因此 “std::cout” 的意思, 就是告訴 C++ 編譯器:這位 cout 同學 是 std 這一班的。

為什麼程式的一開始還要加上 #include 這串程式指令呢?想來好笑,當初我一開始接觸C++的時候,一本書厚厚的,只看到 #include 就停住了,所以事隔一年之後,問我到底在那本書裡面看到了什麼,我就會大笑,因為我只有看到iostream,而且還搞不懂他是在幹嘛的。

基本上,在Dev C++當中,把很多的內建函式放在不同的引入檔裡面,而最基本的引入檔,就是iostream,也就是說,如果你沒有引入iostream這個東西,就沒有辦法繼續下去。這行程式碼的意思,就是較編譯器去呼叫位於iostream當中標準資料流I/O程式庫宣告式,如果你要做數學運算,則需要使用 #include 的函式庫。

而標準函式庫,則是放在std的命名空間當中,而當我們想要去使用放在std裡面的cuot,就必須以 std::cout 的方式去呼叫,這樣編譯器才會知道要到std裡面去找std的cout。

但是,每次用到cin/cout的時候都要再前面多打一個"std::"實在是一件很麻煩的事,所以,我們索性在程式的一開始,就宣告使用std的命名空間。通常,using會有兩種用法:

1. using 名稱空間::成員
2. using namespace 名稱空間

也就是說,我們可以在一開始宣告using namesoace std,然後後面不管使用cin/cout都可以不必加上std::;另外一種方式,就是我們可以宣告 using namespace::cin 或是using namespace::cout,然後後面也可以直接使用,不需要另外加上std::。個人的習慣,則是直接使用using namespace std,基本上,我是個蠻懶得打字的傢伙。

搞懂命名空間,只是C++程式撰寫的第一步,還沒真正踏進C++的世界,充其量,也不過就是在門口張望罷了!而我現在,還在C++的門口徘徊。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s