一、引子
乙個中大型軟體往往由多名程式設計師共同開發,會使用大量的變數和函式,不可避免地會出現變數名或函式名的命名衝突。當所有人的**測試通過,結合在一起時就有可能會造成命名衝突。例如:小李和小韓都參與了乙個檔案管理系統的開發,它們都定義了乙個全域性變數fp,用來指明當前開啟的檔案,當他們**結合在一起時。很明顯,編譯器會提示fp重複定義。
為了解決合作開發的命名衝突的問題,c++引入了命名空間(namespace)的概念。
諸如:
namespace li//李定義的變數fp
namespace wang//王定義的變數fp
namespace是c++關鍵字c++命名空間比較複雜,我在這裡學習的僅僅是冰山一角。後面在學習中我會一步一步的摸索與學習。,用來定義乙個命名空間
。語法格式為:
namespace
namespace nsb//nsb的命名空間
; int a = 1997;//和乙個和nsb同名的整形變數a
}}namespace nsc
//如何初始化和使用它們呢?
//如下所示:
main(void)
//區域性作用域
3.xia:://使用網域名稱解析操作符
三、c++標頭檔案和標準命名空間std
以上是命名空間的簡介,也是使用標準命名空間的基礎知識。標準命名空間也是說在後期的c++編碼中經常會使用到的**了:
using namespace std;
早期的c++是在c語言的基礎上開發的,早期還不太完善,更不支援命名空間,沒有自己的編譯器,而是將c++**翻譯成c**,再通過c編譯器完成編譯的。
此外嗎,c++還開發了一些新的庫,增加了自己的標頭檔案,諸如:
iostram.h 用於控制台的輸入輸出後來c++引入了命名空間,計畫重新將庫,類,函式,巨集等都納入乙個命名空間中。這個命名空間的名字就是std。---標準命名空間fstream.h 用於檔案操作
complex.h用於複數計算
為了避免重名,c++庫對頭檔名稱也做了調整,去掉了字尾 .h 。所以老式的iostream.h變成了新的iostream。原來c語言中的stdio.h
變成了cstdio; stdlib.h變成了cstdlib。
如何使用:
#include int main()
#include int main()
這兩種方式,在編譯器中都能通過,也就是說大部分編譯器在實現時沒有嚴格遵循c++標準,程式設計師可以使用std,也可以不使用std。
只不過,第一種標準的,第二種不標準。
標準命名空間的作用域:
#include #include #include int add(int n)
cout<<"n = "<>str;
cout<<"input age:"<>age;
//std::printf("%s %d\n", str, age);
cout<<"str is "《一旦使用了標準命名空間,新版支援的標準c庫就不能用std::printf()使用了編譯器g++不會報錯,會報警告 執行時將出現非法指令的錯誤std::printf("%s %d\n", str, age);
//使用標準命名空間 但是標準寫法printf("%s %d\n", str, age);//不使用std 是不標準的寫法 但編譯器不會報錯。
using namespace std; 它宣告了命名空間std,後續如果有未指定的命名空間符號那麼預設使用std。諸如:cin、cout都位於命名空間std
。四、總結
在很多例子中,std是直接宣告在全域性的,是為了後面使用函式方便;但是在中大型專案開發中是不被推薦的,這樣做增加命名衝突的風險。
spring p命名空間 c命名空間
p命名空間 1.需要引入命名空間p 並不真實存在 是在spring內部中實現的 xmlns p 2.如果是引用注入需要加 ref字尾 p和c命名空間 並不適用於集合引數 c命名空間 1.需要引入命名空間c 並不真實存在 是在spring內部中實現的 xmlns c 2.可以使用c 引數名 或c 引數...
C 標準命名空間std
輸入輸出要用到這個.標準c 庫的所有的識別符號都是在乙個名為std的命名空間中定義的,或者說標準標頭檔案 如iostream 中函式 類 物件和類模板是在命名空間 std中定義的。std是standard 標準 的縮寫,表示這是存放標準庫的有關內容的命名空間。二元作用域分辨運算子 using std...
C 命名空間 預設命名空間與匿名命名空間
2.匿名命名空間 預設命名空間也叫全域性命名空間,所有沒有置於某一具體命名空間下的 即在預設命名空間下,例如func main 函式。include void func void intmain int argc,char ar void func void 需要注意的是 這個就是類似於c語言裡簡單...