3-1 名稱空間

c發表於2023-03-11

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中的所有,例如coutcin

  • 情形二

對於using要注意不要在標頭檔案中使用,容易造成潛在衝突。另外採用using也容易造成二義性,比如Jerry和Tom的名稱空間中都有money,採用using的話就會造成衝突

using Jerry::money;
using Tom::money;

如果我們把using去掉的話,就不會出現這種情況了

相關文章