名字空間(namespace)

意義

對于一個較大型的C++程序來說,需要由多個程序員相互協作編寫,這樣的情況下容易出現不同程序員在需要負責的程序部分使用相同名字的變量或函數,導致程序合并后出現問題。名字空間的作用,就是將不同程序員編譯的程序放入相應的名字空間,每個名字空間相對獨立,空間內的變量和函數名只局限于當前空間下,從而解決命名沖突的問題。

格式

 namespace 空間名 {程序塊} 

使用

1. 自定義名字空間

/*zhang.h*/                                       //原編譯文件
#ifndef ZHANGH
#define ZHANGH
namespace Zhang{
    void f();
    class T{
           void ZhangFunc();
    };
}
#endif
/*zhang.cpp*/                                  //使用名字空間中的變量和函數
void Zhang::f(){}                              //使用Zhang中的f()
void Zhang::g(){}                             
void Zhang::T::ZhangFunc()           //使用Zhang中的類T中的ZhangFunc()
{
} ```

include <iostream>

using namespace std;
namespace my{
int abc = 100;
class T{
...
};
}
namespace my{
void myFunc(){
cout<<"Show string!"<<endl;
}
} //實際上上面兩個my名字空間為同一個my,分開寫減少代碼長度
int main(){
my::myFunc();
cout<<my::abc<<endl; //調用的是同一個my
return 0;
}```

2. 匿名名字空間

不命名,即namespace后不加空間名,此時在文件中只可通過特殊的地址傳遞方式訪問其中的內容,每次編譯C++自動賦予其名字,故實際上只能編譯該空間一次,其具體作用后續再介紹。

3. 全局名字空間

在主文件中用到的名字空間,作用域為整個當前cpp文件,格式為

 using namespace 空間名 

典型案列

using namespace std

std 即為包含輸入輸出流的全局名字空間(任何空間都可作為全局名字空間使用)
使用std名字空間的程序例子如下

#include<iostream>
using namespace std;
int abc = 100;
void myFunc(){
      cout<<"Show string!"<<endl;
}
int main(){
    ::myFunc(); myFunc();                      //兩句意思相同
    ::cout<<::abc<<abc<<endl;               //::cout,::abc即是cout,abc
    return 0;
}```
使用其他名字空間的例子如下

include <iostream>

using namespace std;
namspace first
{
int x = 5;
}
namspace second
{
double x =3.1416;
}
int main(){
{ //編譯時不同的名字空間為限定其作用范圍應該加入大括號
using namespace first;
cout<<x<<endl;
}
{
using namespace second;
cout <<x<<endl;
}
//如果不加入大括號則實際代碼如下
using first::x;
cout<<x<<endl;
using second::x; //此處x與之前的x沖突,編譯器無法識別,報錯
cout<<x<<endl;
//
return 0;
}```

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、 為什么需要命名空間(問題提出) 命名空間是ANSIC++引入的可以由用戶命名的作用域,用來處理程序中 常見的...
    IvanRunning閱讀 2,391評論 0 2
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,914評論 18 139
  • 一、溫故而知新 1. 內存不夠怎么辦 內存簡單分配策略的問題地址空間不隔離內存使用效率低程序運行的地址不確定 關于...
    SeanCST閱讀 7,874評論 0 27
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,242評論 25 708
  • 終于失戀了,已經是大齡青年的我卻不得不承認這個事實,在那個女子輕松而又沉重地對我說出分手這句話之后,我感到...
    小說熱愛者閱讀 312評論 0 1