1 namespace
-
名稱空間解決了命名衝突問題
-
大型工程中推薦直接採用域解析運算子,採用using易造成二義性
-
不要在標頭檔案按中使用using
-
情形一
名稱空間通常用於解決命名衝突的問題,比如在大型專案中,我們可能在兩個檔案中命名了兩個相同名字的函式,或者變數,為了明確我們所使用的函式或變數到底是哪一個檔案中的,就引入了namespace
的概念。
名稱空間相當於提供了一個宣告區域,其使用方法如下:
namespace Jerry{
double money;
void get_MOney();
int pal;
strut well{...};
}
名稱空間可以是全域性的,也可以是巢狀在另一個名稱空間中的,但是不可以位於程式碼塊中。對於名稱空間中名稱的訪問,採用域解析運算子::
來實現,如
Jerry::money=12.34;
Jerry::get_Money();
但是我們每一次使用都採用上述方法在有些時候會顯得程式冗雜,而且編寫者也會感到不耐煩,因此C++提供了兩種機制來建輝對名稱空間中名稱的使用,即using宣告和using編譯指令,其中using宣告將特定的名稱新增到它所屬的宣告區域,using編譯指令(using namespace)使整個名稱空間可用。
using Jerry::money;//using宣告
using namespace Jerry;//using編譯指令
這個時候我們就明白寫程式時一直所使用的using namespcae std
意思就是可以使用名稱空間std中的所有,例如cout
、cin
- 情形二
對於using要注意不要在標頭檔案中使用,容易造成潛在衝突。另外採用using也容易造成二義性,比如Jerry和Tom的名稱空間中都有money,採用using的話就會造成衝突
using Jerry::money;
using Tom::money;
如果我們把using去掉的話,就不會出現這種情況了