C++標准程序庫中的所有標識符都被定義於一個名為std的namespace中。
namespace是指標識符的各種可見范圍。命名空間用關鍵字namespace 來定義。命名空間是C++的一種機制,用來把單個標識符下的大量有邏輯聯系的程序實體組合到一起。
此標識符作為此組群的名字。
如果我們使用了using namespace std, 而且我們在自己的程序中定義了一個函數toupper(),這將重寫標准庫中的toupper()函 數,這是因為這兩個函數都是位於全局命名空間中的。
那么我們的minm
少在頭文件中使用using namespace std,因為你的頭文件可能被別人的cpp包含,那么這些cpp也默認就using namespace std了。這樣的話可能會造成問題,例如在c++11和boost中都有shared_ptr,不指定namaspace或者using了兩個namespace可能會造成混淆問題。
一般說來,
使用using命令比
使用using編譯命令更
安全,這是由於它
只導入了制定的名稱。如果該名稱與局部名稱發生沖突,編譯器
將發出指示。using編譯命令導入所有的名稱,包括可能並不需要的名稱。如果與局部名稱發生沖突,則
局部名稱將覆蓋名稱空間版本,而編譯器
並不會發出警告。另外,名稱空間的開放性意味着名稱空間的名稱可能分散在多個地方,這使得難以准確知道添加了哪些名稱。
using命令:using std::cout;
using編譯命令:using namespace std;
不要在頭文件使用using namespace std;