什麼是命名空間?為什麼要寫using namespace std;這句話呢?
這是C++新引入的一個機制,主要是為了解決多個模組間命名衝突的問題,就像現實生活中兩個人重名一個道理。 C++把相同的名字都放到不同的空間裡,來防止名字的衝突。
例如標準C++函式庫提供的物件都存放在std這個標準名字空中,像是cin、cout、endl,所以我們會看到在C++程式中都會有using namespace std;這句話了,如程式:
#include<iostream>usingnamespacestd;intmain(){cout<<Nicetomeetyou!<<endl;return0;}
程式用到cout和endl則必須事先告知使用std這個命名空間,除此之外,還有另外兩種寫法。
第二種:用域限定符::來逐一制定,剛才的程式碼還可以寫成:
#include<iostream>intmain(){std::cout<<Nicetomeetyou!<<std::endl;return0;}
看到了嗎? cout和endl前面分別用std::指明,表示來自std。
第三種:用using和域限定符一起制定用哪些名字,如代號:
#include<iostream>usingstd::cout;usingstd::endl;intmain(){cout<<Nicetomeetyou!<<endl;return0;}
看到了嗎?在前面先用using對具體的名字進行聲明也可以。
以上三種,大家用哪一種都可以,為今後統一方便,我們教程中統一採用第一種寫法。
值得一提的是,其實早期的C++標準是沒有命名空間這個概念的,頭檔包含也和C一樣,都是帶.h後綴的。只是新標準中使用不含.h的頭檔包含時,必須要聲明命名空間,並且包含頭檔在前,聲明使用的名字空間在後。