天天看點

為什麼添加using namespace std

那是命名空間,你所用到的很多函數或者類都是被放到命名空間裡面的,命名空間是防止名字重複而使用的,比如STL有個類叫string,而你也設計一個類叫string,那麼編譯器編譯的時候就搞不清楚到底是那個string,是以用一個命名空間就比較友善了。具體是這麼回事的,比如有兩個班級,A班和B班,兩個班各有一個叫張三的人,而兩個班的同學互相之間都是非常熟悉的。那麼他們聊天的時候說張三,那其他人肯定會問,哪個張三?對吧,因為搞不清楚到底說的是哪個,是以會犯迷糊。而這個時候,那個人會補充,A班的張三或者B班的張三,這樣,其他人就知道到底是誰了。這裡的A班,B班就好像命名空間一樣,而張三就好像那個string,或者說是對象,變量或者函數。當你自己定義一個string并把它放到命名空間AAA中的時候,你使用string隻要指定是哪個命名空間的,就不會導緻編譯器分不清是哪個string了。你使用時會用std::string或者AAA::string,前者告訴編譯器我用的string是在命名空間std裡面的,後者告訴編譯器用的string是在命名空間AAA裡面的。這樣,編譯器就一目了然,不會出錯。但是你卻發現每次隻要用到string都必須在前面加上AAA,這樣相當麻煩,有沒有辦法簡化操作呢?當然有,就好像上面的例子,那些人聊天之前,他可以告訴其他人說,注意,下面說到張三都是說的B班的,那麼其他人就知道,後面隻要出現張三都是在說B班的,不是A班的了。很多文章裡面也有這樣的情況啊,一般注明是以下簡稱什麼什麼的,就是為了避免重複,導緻混淆。而程式一樣的,你可以先告訴編譯器你用的string是哪個命名空間的。就要用到這句了。using namespace std;這樣告訴編譯器,我沒有指定命名空間的,就預設使用std這個命名空間,那麼你使用string就不用再加std::作用域了。隻需要直接寫string就可以了,編譯器就知道你說的是哪個string了。      

繼續閱讀